2013-07-29 40 views
0

我的机器是Windows 8机器。我想从我的自定义驱动程序中读取HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36fc9e60-c465-11cf-8056-444553540000}的“UpperFilters”键,以获得通过USB设备的过滤器驱动程序。如何从驱动程序代码中读取注册表?

回答

3

我没有,因为写的驱动程序XP的日子,但假设你在谈论一个内核模式驱动程序,我相信你需要ZwOpenKey,ZwQueryValueKeyZwClose。一般指导here

+1

是的,这正是我所要求的。 –

-1

here是代码示例来读取在C

这里的注册表是一个示例:

DWORD BufferSize = TOTALBYTES; 
DWORD cbData; 
DWORD dwRet; 

PPERF_DATA_BLOCK PerfData = (PPERF_DATA_BLOCK) malloc(BufferSize); 
cbData = BufferSize; 

printf("\nRetrieving the data..."); 

dwRet = RegQueryValueEx(HKEY_PERFORMANCE_DATA, 
         TEXT("Global"), 
         NULL, 
         NULL, 
         (LPBYTE) PerfData, 
         &cbData); 
while(dwRet == ERROR_MORE_DATA) 
{ 
    // Get a buffer that is big enough. 

    BufferSize += BYTEINCREMENT; 
    PerfData = (PPERF_DATA_BLOCK) realloc(PerfData, BufferSize); 
    cbData = BufferSize; 

    printf("."); 
    dwRet = RegQueryValueEx(HKEY_PERFORMANCE_DATA, 
        TEXT("Global"), 
        NULL, 
        NULL, 
        (LPBYTE) PerfData, 
        &cbData); 
} 
if(dwRet == ERROR_SUCCESS) 
    printf("\n\nFinal buffer size is %d\n", BufferSize); 
else printf("\nRegQueryValueEx failed (%d)\n", dwRet); 

或一个简单的例子

RegGetValue(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Class", "{36fc9e60-c465-11cf-8056-444553540000}", RRF_RT_ANY, NULL, (PVOID)&value, &BufferSize); 
+1

不错。优秀作品。你的代码在用户模式下工作正常。但是这并不能回答我的问题。实际上在内核模式下,因为我正在讨论驱动程序开发,所以没有找到malloc及其亲属,相反我们有ExAllocatePool()及其亲戚。另外RegXXX()函数不可用。相反,我们有ZwXXX()函数。 –

相关问题