资源简介

寒江独钓 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个文件信息

评论

共有 条评论