阅读:1080回复:1
驱动程序中函数的参数传递问题?
各位前辈,我在调试一个程序的时候发现一个问题,这个代码是论坛上某牛人写的文件过滤程序,我把其中的一个函数分成两个,想重用一段代码,修改后出现了问题,先上代码我再解释:
VOID HideMe(IN PUNICODE_STRING RegistryPath) { PWCHAR pStr = NULL; FindSystemPath(RegistryPath,pStr);//此函数执行后,pStr依然是无效值,引起内存访问错误 while (*pStr != L'\\') { pStr--; } AddHideObject(pStr + 1, CDO_FLAG_FILE); //KdPrint(("%ws", pStr + 1)); } //获取注册表中保存该驱动程序的键值指针 VOID FindSystemPath(IN PUNICODE_STRING RegistryPath,OUT PWCHAR pStr){//参数传递的问题 NTSTATUS status; HANDLE hkey; OBJECT_ATTRIBUTES oa; ULONG size = 0; UNICODE_STRING valname; //PWCHAR pStr = NULL; PKEY_VALUE_PARTIAL_INFORMATION vpip; ......... ......... ......... status = ZwQueryValueKey(hkey, &valname, KeyValuePartialInformation, vpip, size, &size); if (!NT_SUCCESS(status)) { return; } //得到镜像文件的路径 pStr = (PWCHAR)(vpip->Data + vpip->DataLength);//此时pStr 得到的是有效值 ExFreePool(vpip); ZwClose(hkey); } } 问题: 调用函数FindSystemPath(IN PUNICODE_STRING RegistryPath,OUT PWCHAR pStr)后,pStr并未得到有效值,估计是参数传递出了问题,尝了以下解决方法均无效: 1.使用引用参数传递,试了下不成功,不知驱动程序中支不支持该种传递方式. 2.使用指向指针的指针来传递,现在还未调试成功,对我来说太复杂....(新手请包涵) 想听听前辈的的讲解,具体的错误原因及解决方法,如述有不详请随时联系我QQ:154510256 谢谢了 |
|
沙发#
发布于:2008-10-20 08:56
这个代码的简化原型是
void int abc(int x,int y) { y = x+2; } int main(int argc,char* argv[]) { int a = 1; int b = 2; abc(a,b); printf("a=%d,b=%d\r\n",a,b); } |
|
|