RedFox_4U
驱动大牛
驱动大牛
  • 注册日期2002-11-27
  • 最后登录2003-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2156回复:7

RegistryPath怎么取得?

楼主#
更多 发布于:2003-02-14 11:03
在DriverEntry的参数中有一个PUNICODE_STRING RegistryPath
我想使用这个路径读取注册表,但“好象这个变量在驱动初始化完以后就丢掉了”
怎么样才能使我在别的函数中取得这个路径RegistryPath呢?

--我试过定义一个全局变量PUNICODE_STING AA,并使用RtlCopyUnicodeString拷贝RegistryPath中的内容到AA,但没有成功。
------------------------
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-14 16:54
还不能吗?我试了一下已经得到了,不过其中的字符转换方法比较笨,要的话pm我你的mail,我把代码发给你
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于: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。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-02-14 22:52
你用指针,就要分配内存呀,估计是你没有分配的原因。
记得要释放申请的内存。或者就用UNICODE_STRING。
RtlInitUnicodeString(...)
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-15 10:08
对,楼上讲的很好

另外如果直接用unicodestring的话,其buffer是ansi字符和 0相间的wstr字符串,直接传出来不好用,可以用RtlUnicodeStringToAnsiString 转一下,就直接得到普通的字符串了。 :)
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-15 12:33
to RedFox_4U 兄:

最近boss逼你做驱动?
 :P
[color=red]大头鬼! :P[/color]
RedFox_4U
驱动大牛
驱动大牛
  • 注册日期2002-11-27
  • 最后登录2003-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-17 10:00
谢谢,各位大哥热心帮助

小弟,确实初次涉及驱动,而且以前那点C语言基础也差不多快还给老师了

正如大头兄所言,被逼无奈啊
------------------------
RedFox_4U
驱动大牛
驱动大牛
  • 注册日期2002-11-27
  • 最后登录2003-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-17 10:01
PM:我的email地址:zwg_zwg@hotmail.com

也可以使用MSN和我联系
------------------------
游客

返回顶部