驱动开发例程-驱动入门详解
目录
热身阶段 3
问1:什么是过滤驱动?(2009-4-15) 3
问2:什么是IRP?(2009-4-15) 4
问3:驱动栈,设备栈?(2009-4-15) 7
问4:文件系统过滤驱动(FSFD)为什么能过滤文件系统(FSD)?(2009-4-16) 9
问5:怎么用好DDK(或WDK,现在起本书只说WDK)?(2009-4-16) 12
Legacy驱动阶段 13
问6:DriverEntry和DriverUnload是干嘛的?(2009-04-20) 13
问7:SfCreate(2009-04-20) 13
问8:SfDisplayCreateFileName(2009-04-23) 15
问9:fastio系列例程(2009-04-28) 16
问10:总结sfilter(2009-04-28) 26
问11:fspyKern.h、fspydef.h和filespy.h(2009-04-28) 27
问12:fspyHash.c(2009-04-28) 28
问13:上下文(2009-04-30) 35
问14:fspyCtx.c(2009-04-28) 40
问15:FspyLib.c(2009-04-28) 50
问16:总结filespy(2009-04-30) 65
问17:legacy驱动透明加解密设计开发示例(2009-04-30) 65
概要设计 65
定位机制设计 67
跟踪机制设计 67
加解密模块设计 68
其他设计 69
问18:总结legacy驱动(2009-05-04) 70
Mini驱动阶段 71
问19:passThrough(2009-05-04) 71
问20:ctx(2009-05-04) 72
问21:scanner(2009-05-05) 76
问22:swapBuffers(2009-05-05) 78
问23:总结mini驱动(2009-05-05) 79
问24:fastfat(2009-05-05) 79
后记 80
2345看图王
2345看图王于2012年6月正式推出,其采用了当前全球最快的图片处理引擎,可以实现令人惊叹的超高清完美画质呈现,是目前市场上最小最快的高清万能看图软件。同时,2345看图王更是国内独家支持连续查看压缩包内图片功能的看图软件。凭借着优异的图像处理能力、优秀的兼容性,2345看图王一经推出,便受到用户和行业的一致好评与青睐。
2345一键安装合集
2345一键安装合集是为了使广大技术员更方便快捷的推广2345产品,更快速赚取积分而倾力打造的软件。 2345一键安装合集共集成了网址导航、2345浏览器、2345好压、2345网址导航桌面版、2345影视大全、2345看图王、电脑管家、2345首页卫士。
使用一键安装合集,省去单个安装包的下载及安装过程。而且,新版一键安装合集会记住每个技术员的选择,能够自定义安装路径,让装机更快捷,真正实现一键安装。
基于Apriori 算法的彩票预测---■罗来鹏刘二根
购买彩票已经成为人们生活当中一
种娱乐性投资。因此, 如何提高中奖率,
必将成为彩民朋友一个很关心的问题。
许多彩民朋友在购买彩票的时候往往会
对以往的出现的数据组合进行分析, 看
看是否有什么规律, 希望将此结果作为
对未来的数据进行预测。在众多的方法
中有一种方法很普遍: 认为在以往众多
期数中出现次数较多的数据或者数据组
合在往后的期数出现的机会也应该很
大。也就是在购买彩票前看看以前哪些
号码出现的次数多, 越多就表示它往后
出现的机会也越多。利用这种方法来购
买下期的号码, 表面上看来很合理。下面
我们针对这个问题使用关联规则挖掘中
经典算法Apriori 算法来对其进行一些
实例研究, 并且运用概率论的知识对所
得结论进行解释。
30天自制操作系统—随书光盘
《30天自制操作系统》 光盘文件
http://product.china-pub.com/3682838#nrjj
部分目录
《30天自制操作系统》
第0天 着手开发之前 1
1 前言 1
2 何谓操作系统 3
3 开发操作系统的各种方法 4
4 无知则无畏 4
5 如何开发操作系统 6
6 操作系统开发中的困难 7
7 学习本书时的注意事项(重要!) 9
8 各章内容摘要 11
第1天 从计算机结构到汇编程序入门 13
1 先动手操作 13
2 究竟做了些什么 19
3 初次体验汇编程序 22
4 加工润色 24
第2天 汇编语言学习与makefile入门 28
1 介绍文本编辑器 28
2 继续开发 29
3 先制作启动区 40
4 makefile入门 41
httprecon-7.3.zip
一直以来,Web服务器识别都是使用httprint来进行扫描,现在多了一个选择了,而且还是开源的。
The httprecon project is doing some research in the field of web server fingerprinting, also known as http fingerprinting. The goal is the highly accurate identification of given httpd implementations. This is very important within professional vulnerability analysis.
Besides the discussion of different approaches and the documentation of gathered results also an implementation for automated analysis is provided. This software shall improve the easyness and efficiency of this kind of enumeration. Traditional approaches as like banner-grabbing, status code enumeration and header ordering analysis are used. However, many other analysis techniques were introduced to increase the possibilities of accurate web server fingerprinting. Some of them were already discussed in the book Die Kunst des Penetration Testing (Chapter 9.3, HTTP-Fingerprinting, pp. 530-550).
T598_51实验指导书
T598_51实验指导书
第一章 系统安装和启动 1
一 实验系统工作方式 1
二 AEDK598实验系统工作在MCS51方式下开关初始状态 1
第二章 MCS51系列单片机实验 2
实验一 扩展存储器读写实验 2
实验二 P1口输入、输出实验 5
实验三 P3口输出控制继电器实验 7
实验四 简单I/O实验(交通灯控制) 8
实验五 外部中断实验(急救车与交通灯) 10
实验六 定时器实验 12
实验七 计数器实验 14
实验八 8255输入、输出实验 16
实验九 8255扫描键盘、显示实验 18
实验十 8279显示实验 20
实验十一 8279显示电子钟实验 22
实验十二 8279键盘显示实验(电子秒表) 25
实验十三 串并转换实验 28
实验十四 单片机串行口与PC机通讯实验 30
实验十五 8251可编程串行口与PC机通讯实验 32
实验十六 8253定时/计数器实验 35
实验十七 D/A转换实验 37
实验十八 A/D转换实验 39
实验十九 并行打印机实验 41
实验二十 电子音调实验 43
实验二十一 LCD显示实验 45
实验二十二 LED点阵显示实验 47
实验二十三 FlashRom读写实验 50
实验二十四 语音芯片实验 52
实验二十五 P1口控制直流电机实验 55
实验二十六 直流电机转速测量实验 57
实验二十七 步进电机控制实验 60
实验二十八 压力测量显示实验 62
实验二十九 温度测量与显示实验 64
nemesis-1.4beta3.tar.gz
NEMESIS -=- The NEMESIS Project Version 1.4beta3 (Build 22)
NEMESIS Usage:
nemesis [mode] [options]
NEMESIS modes:
arp
dns
ethernet
icmp
igmp
ip
ospf (currently non-functional)
rip
tcp
udp
NEMESIS options:
To display options, specify a mode with the option "help".
*号查看器v0.11
在程序员眼中,Windows的用户界面就是一个由无数个大小窗口组合在一起的整体。密码框也不例外, 它是一个具有ES_PASSWORD风格的"TEdit"类子窗口控制。既然它是一个窗口,就难免具有一些Windows窗口所共有的特性: 有一个窗口过程;可以接收消息。
或许你已经知道,向文本框发送一个WM_GETTEXTLENGTH消息,就能获得文本框中的字符串长度。 如果向文本框发送一个WM_GETTEXT消息,就能获得文本框中的字符串。这两个消息对密码框同样有效,因为它们都是基于 "TEdit"类所创建的子窗口控制,只是风格不同罢了。
我们可以用以下两行代码来获取密码了:
iLength = SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0) ;
SendMessage(hwnd, WM_GETTEXT, (WPARAM)(iLength + 1), (LPARAM)(pStrPassWord)) ;
问题1:SendMessage函数需要密码框的窗口句柄作为参数, 如何得到密码框的窗口句柄呢?
很简单,使用WindowFormPoint API函数。该函数接受一个POINT类结构的参数, 并返回包含该点的窗口句柄,函数原型如下:
HWND WindowFromPoint(POINT point) ;
知识准备充足,代码如下:
/*------------------------------------
*号查看器v1.0
20110407 Ra
-------------------------------------*/
#include <windows.h>
#define WM_GETCODE WM_USER+1
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) ;
LRESULT CALLBACK EditProc(HWND, UINT, WPARAM, LPARAM) ;
WNDPROC OldProc ;
POINT point ;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT("GetCode") ;
MSG msg ;
HWND hwnd ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon(NULL, IDI_WINLOGO) ;
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass(&wndclass))
{
MessageBox(NULL, TEXT("This program requires Windows NT!") ,
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindowEx(WS_EX_TOPMOST, szAppName, TEXT("*号查看器"),
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow(hwnd, iCmdShow) ;
UpdateWindow(hwnd) ;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg) ;
DispatchMessage(&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hwndEdit ;
static HINSTANCE hInstance ;
switch(message)
{
case WM_CREATE:
hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE) ;
hwndEdit = CreateWindow(TEXT("button"), TEXT("请将此按钮拖放到你想查看的*号上"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0, 0, 0, 0,
hwnd, (HMENU)1,hInstance, NULL) ;
OldProc = (WNDPROC)SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG)EditProc) ;
//改变指定窗口的属性
//GWL_WNDPROC:为窗口过程设定一个新的地址
return 0 ;
case WM_SIZE:
TEXTMETRIC tm ;
HDC hdc ;
int cxChar, cyChar, cxScreen, cyScreen, iWndWidth, iWndHeight ;
//确定主窗口宽度与高度
cxScreen = GetSystemMetrics(SM_CXSCREEN) ;
cyScreen = GetSystemMetrics(SM_CYSCREEN) ;
iWndWidth = cxScreen / 10 * 4 ;
iWndHeight = cyScreen / 4 ;
//确定字符宽度与高度
hdc = GetDC(hwnd) ;
GetTextMetrics(hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight + tm.tmExternalLeading ;
MoveWindow(hwnd, cxScreen / 100, cyScreen / 100, iWndWidth, iWndHeight, TRUE) ;
MoveWindow(hwndEdit, (iWndWidth - cxChar * 38) / 2, iWndHeight / 3,
cxChar * 38, cyChar + 10, TRUE) ;
//对指定的窗口设置键盘焦点。该窗口必须与调用线程的消息队列相关。
SetFocus(hwnd) ;
return 0 ;
case WM_GETCODE:
HWND hwndDst ;
int iLength ;
TCHAR PassWord[255], ClassName[255] ;
//获得包含指定点的窗口的句柄。
hwndDst = WindowFromPoint(point) ;
if (hwndDst == hwndEdit || hwndDst == hwnd)
{
MessageBox(hwnd, TEXT("如果你有任何意见或建议,请与我联系:td1126@163.com"), TEXT("关于 Ra"),
MB_ICONINFORMATION) ;
return 0 ;
}
iLength = GetClassName(hwndDst, ClassName, 255) ;
if (!iLength)
{
MessageBox(hwnd, TEXT("获取类名失败!"), TEXT("Error"), MB_ICONERROR) ;
return 0 ;
}
if (strncmp((char *)ClassName, (char *)"TEdit",4) != 0)
{
MessageBox(hwnd, TEXT("目标位置不是一个密码框!"), TEXT("Error"), MB_ICONERROR) ;
//return 0 ;
}
iLength = SendMessage(hwndDst, WM_GETTEXTLENGTH, 0, 0) ;
SendMessage(hwndDst, WM_GETTEXT, (WPARAM)(iLength + 1), (LPARAM)PassWord) ;
MessageBox(hwnd, PassWord, TEXT("你想得到的密码是:"), MB_OK) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage(0) ;
return 0 ;
}
return DefWindowProc(hwnd, message, wParam, lParam) ;
}
LRESULT CALLBACK EditProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HCURSOR hOldCursor, hMyCursor ;
switch(message)
{
case WM_LBUTTONDOWN:
//从一个与应用事例相关的可执行文件(EXE文件)中载入指定的光标资源。
hMyCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_CROSS)) ;
//该函数确定光标的形状。
hOldCursor = SetCursor(hMyCursor) ;
SetCapture(hwnd) ;
return 0 ;
case WM_LBUTTONUP:
//从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在另一个线程的窗口中。
ReleaseCapture() ;
SetCursor(hOldCursor) ;
point.x = LOWORD(lParam) ;
point.y = HIWORD(lParam) ;
//将指定点,或者矩形的用户坐标转换成屏幕坐标。
ClientToScreen(hwnd, &point) ;
SendMessage(GetParent(hwnd), WM_GETCODE, 0, 0) ;
return 0 ;
}
return CallWindowProc(OldProc, hwnd, message, wParam, lParam) ;
}
WM_GETCODE是用户自定义消息,根据Windows编程规则,它的值应大于0X0400,我们把它定义为WM_USER+1,即:0X0401。point是一个POINT类全局结构变量,用来保存密码框的坐标值。
主窗口过程在WM_CREATE消息期间创建了一个按钮控制hwndEdit,并使用窗口子类化技术给它安装了一个钩子,捕获它的WM_LBUTTONDOWN、WM_LBUTTONUP消息。这时,Windows的内部窗口过程就不能再处理这两个消息,所以,我们在按钮上单击鼠标左键时,不会再看到按钮被按下并弹起的视觉效果,但这点对我们并不重要。
当用户在按钮控制上按下鼠标左键时,Windows会向按钮控制发送一个WM_LBUTTONDOWN消息,这个消息会被我们编写的EditProc窗口过程捕获,我们对这个消息的处理很简单:将鼠标光标设置为十字型,并捕获鼠标。鼠标被捕获后,所有的鼠标消息都将被发送到按钮控制的窗口过程,即EditProc。但我们只处理鼠标消息的WM_LBUTTONUP消息,而使用
return CallWindowProc(OldProc, hwnd, message, wParam, lParam) ;
将其它的消息交由Windows的内部窗口过程处理。
在WM_LBUTTONUP消息期间,我们先撤消对鼠标的捕获,再将鼠标光标恢复原状,然后保存鼠标左键释放时的坐标位置。注意,这个坐标值是相对于按钮控制的客户区坐标,所以我们必须使用ClientToScreen函数将它转换成屏幕坐标。最后,使用SendMessage函数给主窗口发送一个WM_GETCODE自定义消息,把余下的工作交给主窗口过程处理。
主窗口过程的WM_GETCODE消息逻辑,是程序的核心。它先使用WindowFromPoint函数获得鼠标释放时,鼠标光标所在位置的窗口句柄。如果鼠标是在本程序的窗口内释放,将弹出一个关于消息框。否则,就将获得的窗口句柄进行判断,如果是一个密码框,就给它发送WM_GETTEXTLENGTH、WM_GETTEXT消息,获取密码。
问题2: 利用本程序为什么不能查看QQ密码?
如果你确实用本程序查看过QQ密码的话,那么你会发现你获取的窗口一直是主窗口(父窗口),因为QQ页面设置时利用了一项新技术,具体叫什么名字我忘记了,QQ页面中并没有其他的控件,帐户、密码的输入框并不是windows控件,而是类似于画上去的图形,所以我们无法获取它的句柄,从而无法查看QQ密码。
51单片机c语言简单入门教程
51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程51单片机c语言简单入门教程
win32汇编语言教程
win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程win32汇编语言教程
源代码_BT下载程序
licux 下
源代码_BT下载程序
#include
#include
#include
#include
#include
#include
#include
#include
#include "data.h"
#include "sha1.h"
#include "parse_metafile.h"
#include "bitfield.h"
#include "message.h"
#include "policy.h"
#include "torrent.h"