wangen11
驱动牛犊
驱动牛犊
  • 注册日期2007-10-20
  • 最后登录2008-10-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望16点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:3008回复:1

用IoOpenDeviceRegistryKey和ZwQueryValueKey读注册表的问题

楼主#
更多 发布于:2007-10-20 18:11
各位高人:
有急需请教一下,我是新手,望各位帮忙。

我要在驱动中调用注册表内的一个值,就是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了.
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-02-25 11:28
Re:用IoOpenDeviceRegistryKey和ZwQueryValueKey读注
我的用法:
IoOpenDeviceRegistryKey(pdo, PLUGPLAY_REGKEY_DEVICE, STANDARD_RIGHTS_READ, &regHandle);
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
游客

返回顶部