阅读:3122回复:1
用IoOpenDeviceRegistryKey和ZwQueryValueKey读注册表的问题
各位高人:
有急需请教一下,我是新手,望各位帮忙。 我要在驱动中调用注册表内的一个值,就是usb 相机的FrameRate的值来做判断,我要的值在 HKEY_LOCAL_MACHINE\\SYSTEM\\ControlSet001\\Control\\Class\\{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\\0001\\FrameRateNumber中,就是FrameRateNumber的值 我先用 status=IoOpenDeviceRegistryKey (pDC->pPnPDeviceObject,PLUGPLAY_REGKEY_DRIVER,STANDARD_RIGHTS_READ,&hPDOKey); 打开设备的驱动对象,然后用 status = ZwQueryValueKey( hPDOKey, FrameRateNumber, //要获取数据的注册表键的名称 KeyValuePartialInformation, //请求信息的类型 &Framerate, //缓冲区指针 0x80, //缓冲区大小 &dataLength); 来得到此值,可是一直没有成功,这个函数我没有使用过,请大家指教一下,如何才可以得到这个值? 头文件,初始化我都OK了. |
|
驱动小牛
![]() |
沙发#
发布于:2008-02-25 11:28
Re:用IoOpenDeviceRegistryKey和ZwQueryValueKey读注
我的用法:IoOpenDeviceRegistryKey(pdo, PLUGPLAY_REGKEY_DEVICE, STANDARD_RIGHTS_READ, ®Handle); length = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 128*sizeof(WCHAR);//你用的0x80仔细算下 pInfo = (PKEY_VALUE_PARTIAL_INFORMATION)ExAllocatePool(NonPagedPool, length); ZwQueryValueKey(regHandle, &keyNameString, KeyValuePartialInformation, pInfo, length, &length); 如果是对的话就看看返回什么值 ZwQueryValueKey returns STATUS_SUCCESS if it returned the requested information in the KeyValueInformation buffer. Otherwise, ZwQueryValueKey can return one of the following: STATUS_BUFFER_OVERFLOW STATUS_BUFFER_TOO_SMALL STATUS_INVALID_PARAMETER STATUS_OBJECT_NAME_NOT_FOUND |