阅读:2156回复:7
RegistryPath怎么取得?
在DriverEntry的参数中有一个PUNICODE_STRING RegistryPath
我想使用这个路径读取注册表,但“好象这个变量在驱动初始化完以后就丢掉了” 怎么样才能使我在别的函数中取得这个路径RegistryPath呢? --我试过定义一个全局变量PUNICODE_STING AA,并使用RtlCopyUnicodeString拷贝RegistryPath中的内容到AA,但没有成功。 |
|
|
沙发#
发布于:2003-02-14 16:54
还不能吗?我试了一下已经得到了,不过其中的字符转换方法比较笨,要的话pm我你的mail,我把代码发给你
|
|
|
板凳#
发布于:2003-02-14 22:48
NTSTATUS
DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { DriverObject->DriverUnload = DriverUnload; <--1 DriverObject->DriverExtension->AddDevice = AddDevice; DriverObject->DriverStartIo = StartIo; DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp; <--2 DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower; DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = DispatchWmi; ... <--3 servkey.Buffer = (PWSTR) ExAllocatePool(PagedPool, RegistryPath->Length + sizeof(WCHAR)); <--4 if (!servkey.Buffer) return STATUS_INSUFFICIENT_RESOURCES; servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR); RtlCopyUnicodeString(&servkey, RegistryPath); return STATUS_SUCCESS; <--5 } 这是walt oney的一些例子。你可以把servkey放在device_extension。 4.如果驱动程序需要访问设备的服务键,可以在这里备份RegistryPath串。例如,如果驱动程序要作为WMI生产者(见第十章),则需要备份这个串。这里我假设已经在某处声明了一个类型为UNICODE_STRING的全局变量servkey。 |
|
地板#
发布于:2003-02-14 22:52
你用指针,就要分配内存呀,估计是你没有分配的原因。
记得要释放申请的内存。或者就用UNICODE_STRING。 RtlInitUnicodeString(...) |
|
地下室#
发布于:2003-02-15 10:08
对,楼上讲的很好
另外如果直接用unicodestring的话,其buffer是ansi字符和 0相间的wstr字符串,直接传出来不好用,可以用RtlUnicodeStringToAnsiString 转一下,就直接得到普通的字符串了。 :) |
|
|
5楼#
发布于:2003-02-15 12:33
to RedFox_4U 兄:
最近boss逼你做驱动? :P |
|
|
6楼#
发布于:2003-02-17 10:00
谢谢,各位大哥热心帮助
小弟,确实初次涉及驱动,而且以前那点C语言基础也差不多快还给老师了 正如大头兄所言,被逼无奈啊 |
|
|
7楼#
发布于:2003-02-17 10:01
PM:我的email地址:zwg_zwg@hotmail.com
也可以使用MSN和我联系 |
|
|