资源简介
寒江独钓 windows 内核安全编程光盘代码
代码片段和文件信息
///
/// @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);
// 删除这些设
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2009-11-01 22:47 寒江独钓\
目录 0 2009-11-01 22:47 寒江独钓\comcap\
文件 2442 2009-04-28 22:40 寒江独钓\comcap\buildchk_wnet_x86.log
文件 2400 2009-04-28 22:40 寒江独钓\comcap\buildfre_wnet_x86.log
文件 5749 2009-01-26 21:13 寒江独钓\comcap\comcap.c
文件 989 2008-12-11 21:24 寒江独钓\comcap\comcap.h
文件 2008 2009-04-27 21:25 寒江独钓\comcap\comcap.vcproj
文件 847 2008-12-11 21:24 寒江独钓\comcap\comcap_tst.h
文件 891 2008-12-11 21:24 寒江独钓\comcap\makefile
文件 177 2009-01-26 21:02 寒江独钓\comcap\my_build.bat
文件 111 2008-12-11 21:24 寒江独钓\comcap\my_clean.bat
文件 219 2009-04-28 21:07 寒江独钓\comcap\sources
目录 0 2009-11-01 22:47 寒江独钓\crypt_file\
文件 3210 2009-05-06 21:45 寒江独钓\crypt_file\buildchk_wnet_x86.log
文件 2735 2009-04-28 22:39 寒江独钓\crypt_file\buildfre_wnet_x86.log
文件 10906 2009-05-06 12:05 寒江独钓\crypt_file\cf_create.c
文件 10908 2009-05-06 11:31 寒江独钓\crypt_file\cf_create.c.bak
文件 1002 2009-02-04 23:53 寒江独钓\crypt_file\cf_create.h
文件 10891 2009-05-06 21:29 寒江独钓\crypt_file\cf_file_irp.c
文件 10876 2009-02-14 00:34 寒江独钓\crypt_file\cf_file_irp.c.bak
文件 1118 2009-01-31 09:44 寒江独钓\crypt_file\cf_file_irp.h
文件 4486 2009-02-10 21:31 寒江独钓\crypt_file\cf_list.c
文件 758 2009-02-07 10:56 寒江独钓\crypt_file\cf_list.h
文件 12304 2009-05-06 14:37 寒江独钓\crypt_file\cf_modify_irp.c
文件 12304 2009-04-27 23:21 寒江独钓\crypt_file\cf_modify_irp.c.bak
文件 1282 2009-02-08 00:23 寒江独钓\crypt_file\cf_modify_irp.h
文件 2440 2009-05-05 22:59 寒江独钓\crypt_file\cf_proc.c
文件 2436 2009-02-08 01:34 寒江独钓\crypt_file\cf_proc.c.bak
文件 970 2009-01-30 13:23 寒江独钓\crypt_file\cf_proc.h
文件 10983 2009-05-20 22:16 寒江独钓\crypt_file\cf_sfilter.c
文件 10978 2009-05-06 15:06 寒江独钓\crypt_file\cf_sfilter.c.bak
............此处省略344个文件信息
- 上一篇:JSBSim技术手册
- 下一篇:PCI GEOMATICA软件培训教程
相关资源
- 《精通CSS+DIV网页样式与布局》光盘源
- zw_ss628100光盘完整拷贝及开发包.zip
- pC游戏编程(人机博弈)光盘
- Xilinx ISE 9.x FPGA/CPLD设计指南 光盘资料
- struts2 spring hibernate框架技术与项目实
- ns与网络模拟+_光盘源代码
- anyreader 存储介质数据恢复
- 《游戏编程精粹1》光盘源代码
- 严蔚敏版数据结构光盘
- 开关电源SPICE仿真与实用设计光盘资料
- [软件调试].张银奎.随书光盘
- IAR EWARM V5嵌入式系统应用编程与开发
- 《Fortran 95_2003程序设计第3版》附带光
- 嵌入式实时操作系统的多线程计算-
- HyperMesh从入门到精通-配套光盘
- visual basic 数据库系统开发导航第二版
- Windows内核安全与驱动开发(随书光盘
- 郭志刚《社会统计分析方法 SPSS软件应
- 任哲《嵌入式实时操作系统uCOS-II原理
- windows2000设备驱动程序设计指南配套光
- FPGA数字信号处理实现原理及方法-清华
- nMaker 4.0 原Windows N in 1 Maker 制作多合一
- WannaCry病毒及WannaCry Recovery 光盘映像可
- Windows N in 1 Maker 4.0 nMaker4.0制作多合一
- 阵列信号处理的理论与应用第二版光
- 嵌入式实时操作系统uCOS-II》(第二版
- 单片机轻松入门光盘最新版
- SY2200 EZ-USB FX2开发套件光盘
- 这是国外网友bernat制作的便携版本,
- Visual C TurboC串口通信编程实践(第2版
评论
共有 条评论