资源简介
《寒江独钓:Windows内核安全编程》从Windows内核编程出发,全面系统地介绍了串口、键盘、磁盘、文件系统、网络等相关的Windows内核模块的编程技术,以及基于这些技术实现的输入密码保护、防毒引擎、文件加密、网络嗅探、网络防火墙等信息安全软件的核心组件的具体编程。主要知识重点包括:Windows串口与键盘过滤驱动、 Windows虚拟存储设备与存储设备过滤驱动、Windows文件系统过滤驱动、文件系统透明加密/解密驱动、Windows各类网络驱动(包括TDI 过滤驱动及3类NDIS驱动),以及最新的WDF驱动开发模型。有助于读者熟悉Windows内核驱动的体系结构,并精通信息安全类的内核编程技术。本书的大部分代码具有广泛的兼容性,适合从Windows 2000一直到目前最新的Windows 7 Beta版。
代码片段和文件信息
///
/// @file comcap.c
/// @author crazy_chu
/// @date 2008-6-18
///
#include
#define NTSTRSAFE_LIB
#include
#ifndef SetFlag
#define SetFlag(_F_SF) ((_F) |= (_SF))
#endif
#ifndef ClearFlag
#define ClearFlag(_F_SF) ((_F) &= ~(_SF))
#endif
#define CCP_MAX_COM_ID 32
// 过滤设备和真实设备
static PDEVICE_object s_fltobj[CCP_MAX_COM_ID] = { 0 };
static PDEVICE_object s_nextobj[CCP_MAX_COM_ID] = { 0 };
// 打开一个端口设备
PDEVICE_object ccpOpenCom(ULONG idNTSTATUS *status)
{
UNICODE_STRING name_str;
static WCHAR name[32] = { 0 };
PFILE_object fileobj = NULL;
PDEVICE_object devobj = NULL;
// 输入字符串。
memset(name0sizeof(WCHAR)*32);
RtlStringCchPrintfW(
name32
L“\\Device\\Serial%d“id);
RtlInitUnicodeString(&name_strname);
// 打开设备对象
*status = IoGetDeviceobjectPointer(&name_str FILE_ALL_ACCESS &fileobj &devobj);
if (*status == STATUS_SUCCESS)
ObDereferenceobject(fileobj);
return devobj;
}
NTSTATUS
ccpAttachDevice(
PDRIVER_object driver
PDEVICE_object oldobj
PDEVICE_object *fltobj
PDEVICE_object *next)
{
NTSTATUS status;
PDEVICE_object topdev = NULL;
// 生成设备,然后绑定之。
status = IoCreateDevice(driver
0
NULL
oldobj->DeviceType
0
FALSE
fltobj);
if (status != STATUS_SUCCESS)
return status;
// 拷贝重要标志位。
if(oldobj->Flags & DO_BUFFERED_IO)
(*fltobj)->Flags |= DO_BUFFERED_IO;
if(oldobj->Flags & DO_DIRECT_IO)
(*fltobj)->Flags |= DO_DIRECT_IO;
if(oldobj->Flags & DO_BUFFERED_IO)
(*fltobj)->Flags |= DO_BUFFERED_IO;
if(oldobj->Characteristics & FILE_DEVICE_SECURE_OPEN)
(*fltobj)->Characteristics |= FILE_DEVICE_SECURE_OPEN;
(*fltobj)->Flags |= DO_POWER_PAGABLE;
// 绑定一个设备到另一个设备上
topdev = IoAttachDeviceToDeviceStack(*fltobjoldobj);
if (topdev == NULL)
{
// 如果绑定失败了,销毁设备,重新来过。
IoDeleteDevice(*fltobj);
*fltobj = NULL;
status = STATUS_UNSUCCESSFUL;
return status;
}
*next = topdev;
// 设置这个设备已经启动。
(*fltobj)->Flags = (*fltobj)->Flags & ~DO_DEVICE_INITIALIZING;
return STATUS_SUCCESS;
}
// 这个函数绑定所有的串口。
void ccpAttachAllComs(PDRIVER_object driver)
{
ULONG i;
PDEVICE_object com_ob;
NTSTATUS status;
for(i = 0;i {
// 获得object引用。
com_ob = ccpOpenCom(i&status);
if(com_ob == NULL)
continue;
// 在这里绑定。并不管绑定是否成功。
ccpAttachDevice(drivercom_ob&s_fltobj[i]&s_nextobj[i]);
// 取消object引用。
}
}
#define DELAY_ONE_MICROSECOND (-10)
#define DELAY_ONE_MILLISECOND (DELAY_ONE_MICROSECOND*1000)
#define DELAY_ONE_SECOND (DELAY_ONE_MILLISECOND*1000)
void ccpUnload(PDRIVER_object drv)
{
ULONG i;
LARGE_INTEGER interval;
// 首先解除绑定
for(i=0;i {
if(s_nextobj[i] != NULL)
IoDetachDevice(s_nextobj[i]);
}
// 睡眠5秒。等待所有irp处理结束
interval.QuadPart = (5*1000 * DELAY_ONE_MILLISECOND);
KeDelayExecutionThread(KernelModeFALSE&interval);
// 删除这些设
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
......R 2058 2009-04-28 22:03 source_code\DP\DP.vcproj
......R 2623 2009-03-20 20:43 source_code\DP\DP.vcproj.MAC.xiao.yang.user
......R 3633 2009-04-28 21:18 source_code\DP\DP.vcproj.old
......R 10236 2009-03-20 00:44 source_code\DP\DPBitmap.c
......R 1864 2009-03-20 00:44 source_code\DP\DPBitmap.h
......R 29772 2009-03-16 09:31 source_code\DP\DPMain.c
......R 4733 2009-03-12 14:11 source_code\DP\DPMain.h
......R 286 2009-04-28 22:38 source_code\DP\buildchk_wnet_x86.log
......R 519 2009-03-12 22:23 source_code\DP\buildchk_wxp_x86.log
......R 286 2009-04-28 22:38 source_code\DP\buildfre_wnet_x86.log
......R 508 2009-03-06 13:21 source_code\DP\clean.bat
......R 891 2009-03-06 13:21 source_code\DP\makefile
......R 177 2009-04-28 22:05 source_code\DP\my_build.bat
......R 111 2008-12-11 21:24 source_code\DP\my_clean.bat
......R 75 2009-03-11 11:57 source_code\DP\sources
......R 6394 2009-04-30 16:52 source_code\Kb_sniff_Mp\KbRelated.c
......R 412 2009-05-06 09:47 source_code\Kb_sniff_Mp\KbRelated.h
......R 12489 2009-05-06 09:47 source_code\Kb_sniff_Mp\Kb_sniffMp.c
......R 1421 2009-05-05 15:49 source_code\Kb_sniff_Mp\Kb_sniffMp.h
......R 975 2009-05-09 11:08 source_code\Kb_sniff_Mp\Kb_sniffMp.sln
.....HR 13824 2009-05-14 21:45 source_code\Kb_sniff_Mp\Kb_sniffMp.suo
......R 1718 2009-05-09 11:03 source_code\Kb_sniff_Mp\Kb_sniffMp.vcproj
......R 6578 2008-11-07 01:24 source_code\Kb_sniff_Mp\Kb_sniffMp.vcproj.7.10.old
......R 1444 2009-05-07 09:52 source_code\Kb_sniff_Mp\Kb_sniffMp.vcproj.NEC-9F096F6DE5D.admin.user
......R 1432 2009-05-07 13:12 source_code\Kb_sniff_Mp\Kb_sniffMp.vcproj.NECAS-SJL.wowocock.user
......R 3239 2009-05-09 11:02 source_code\Kb_sniff_Mp\Kb_sniffMp.vcproj.old
......R 267 2003-02-05 03:23 source_code\Kb_sniff_Mp\MAKEFILE
......R 79 2008-11-07 01:14 source_code\Kb_sniff_Mp\SOURCES.bak
......R 4261 2009-04-30 16:11 source_code\Kb_sniff_Mp\UpgradeLog.xm
......R 3348 2009-04-30 16:11 source_code\Kb_sniff_Mp\_UpgradeReport_Files\UpgradeReport.css
............此处省略348个文件信息
- 上一篇:微信企业号接口开发源码
- 下一篇:AnyCAD三维控件用户手册 v2015
相关资源
- 易语言取微云数据V1源码易语言取微云
- 易语言Excel多表对应处理源码
- 易语言取word打开、另存为对话框窗口
- 易语言EXCEL另存为CSV文件源码
- delphi百度地图源码
- 易语言EMS快递查询源码
- 易语言快递查询源码
- 易语言查询79种快递源码
- 易语言搜搜mp3源码
- 易语言迅雷补丁源码
- 易语言高仿迅雷5安装包源码
- bootstrap demo 源码大全
- springboot整合RabbitMQ实现延时队列的两
- 关于Spring MVC项目maven中通过fileupload上
- 新一代Lora芯片sx126x的驱动源码
- 易语言版迅雷视频转换器源码
- 今日头条源码.zip
- CtrlAltQ全屏截图源码
- 易语言全屏截图源码
- 百度图片识别源码.rar
- 易语言穿越火线辅助程序源码
- WINDOWS内核安全编程 寒江独钓 光盘源
- 寒江独钓-Windows内核安全编程(完整版
- DevExpress 15.1.6 源码 全 百度云
- 很久以前的MUD游戏源码和mudos
- 易语言屏幕锁屏工具源码
- 易语言Beep应用例程源码
- 易语言API的用法之beep源码
- 易语言Beep卡农源码
- 易语言DLL函数查看器源码
评论
共有 条评论