驱动牛犊
|
阅读:1747回复:0
代码分析
// 设置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); |
|