阅读:1792回复:4
DriverEntry里面的RegistryPath 问题?
驱动程序里面初始化一个全局变量PUNICODE_STRING MyRegistryPath = NULL
然后在DriverEntry里面保存系统传进来的 MyRegistryPath 即MyRegistryPath = MyRegistryPath 然后在后面的一个IOCTL CODE 处理函数里面打印为什么只有四个字符 \REG,不是应该一串很长的字符么? 请高手指点. |
|
沙发#
发布于:2004-07-10 13:11
当然不可以这样,哪个是个指针呀!!!!!!!!!!!!!!
等你打印的时候已经.... 所以... |
|
|
板凳#
发布于:2004-07-10 16:16
当然不可以这样,哪个是个指针呀!!!!!!!!!!!!!! 你的意思是DriverEntry结束后RegistryPath所指向的区域被释放了? 那请问怎么保存注册表的值呢? |
|
地板#
发布于:2004-07-10 20:21
自己分配空间来存储,DDK中很多例子都是这样保存的
比如: mouclass中的 Globals.RegistryPath.Length = RegistryPath->Length; Globals.RegistryPath.MaximumLength = RegistryPath->Length + sizeof (UNICODE_NULL); Globals.RegistryPath.Buffer = ExAllocatePool( NonPagedPool, Globals.RegistryPath.MaximumLength); if (!Globals.RegistryPath.Buffer) { MouPrint(( 1, "MOUCLASS-MouseClassInitialize: Couldn't allocate pool for registry path\n" )); status = STATUS_UNSUCCESSFUL; errorCode = MOUCLASS_INSUFFICIENT_RESOURCES; uniqueErrorValue = MOUSE_ERROR_VALUE_BASE + 2; dumpData[0] = (ULONG) RegistryPath->Length + sizeof(UNICODE_NULL); dumpCount = 1; goto MouseClassInitializeExit; } RtlMoveMemory(Globals.RegistryPath.Buffer, RegistryPath->Buffer, RegistryPath->Length); Globals.RegistryPath.Buffer [RegistryPath->Length / sizeof (WCHAR)] = L'\0'; |
|
|
地下室#
发布于:2004-07-14 17:37
非常感谢!非常感谢!
但是还有一个疑问:RtlMoveMemory(Globals.RegistryPath.Buffer, RegistryPath->Buffer, RegistryPath->Length); 函数能否用memcpy 替换呢? [编辑 - 7/14/04 by sean198148] |
|