xuehaipiaoxiang
驱动牛犊
驱动牛犊
  • 注册日期2006-10-11
  • 最后登录2013-02-01
  • 粉丝0
  • 关注0
  • 积分250分
  • 威望273点
  • 贡献值0点
  • 好评度22点
  • 原创分4分
  • 专家分0分
阅读:1747回复:0

代码分析

楼主#
更多 发布于:2007-05-17 05:38
// 设置Start的类型,这样可以决定启动方式,于是只有当本驱动启动的时候才能记录启动时的日志
// InitializeObjectAttributes用来为结构OBJECT_ATTRIBUTES设置一些参数,以便以后的
// ExCreateCallBack或者ZwCreateXXX或者ZwOpenXXX调用时使用。
// 对应的参数如下:
InitializeObjectAttributes(&objectAttributes, RegistryPath, OBJ_CASE_INSENSITIVE, NULL, NULL);
InitializedAttributes: 指向初始化结构的指针,也就是InitializeAttributes的输出。
ObjectName: 对象名称的完整路径
Attributes: 属性
RootDirectory: 根目录的句柄,也就是对象应该存放的地方。或者为NULL
SecurityDescriptor: 安全描述符,可以为空

以写方式打开注册表,并且使用大小写敏感方式
ntStatus = ZwOpenKey(&driverKey, KEY_WRITE, &objectAttributes);
if(NT_SUCCESS(ntStatus))
{
    demandStart = SERVICE_DEMAND_START;
    RtlInitUnicodeString(&startValueUnicodeString, startValueBuffer);
    ZwSetValueKey(driverKey, &startValueUnicodeString, 0, REG_WORD, &demandStart, sizeof(demandStart));
    ZwClose(driverKey);
}

初始化名称和连接对象
RtlInitUnicodeString(&deviceNameUnicodeString, deviceNameBuffer);
RtlInitUnicodeString(&deviceLinkUnicodeString, deviceLinkBuffer);

创建用来和GUI通信的对象
ntStatus = IoCreateDevice(DriverObject, 0, &deviceNameUnicodeString, FILE_DEVICE_REGMON, 0, TRUE, &GUIDevice);

游客

返回顶部