ReadReg.cpp
上传用户:shebeicn
上传日期:2007-01-04
资源大小:1029k
文件大小:2k
源码类别:

驱动编程

开发平台:

Visual C++

  1. // This code shows how to read the registry
  2. // However it is not used by the current Wdm1 code
  3. void ReadReg( IN PUNICODE_STRING DriverRegistryPath)
  4. {
  5. // Make zero terminated copy of driver registry path
  6. USHORT FromLen = DriverRegistryPath->Length;
  7. PUCHAR wstrDriverRegistryPath = (PUCHAR)ExAllocatePool( PagedPool, FromLen+sizeof(WCHAR));
  8. if( wstrDriverRegistryPath==NULL) return;
  9. RtlCopyMemory( wstrDriverRegistryPath, DriverRegistryPath->Buffer, FromLen);
  10. RtlZeroMemory( wstrDriverRegistryPath+FromLen, sizeof(WCHAR));
  11. // Initialise our ULONG and UNICODE_STRING values
  12. ULONG UlongValue = -1;
  13. UNICODE_STRING UnicodeString;
  14. UnicodeString.Buffer = NULL;
  15. UnicodeString.MaximumLength = 0;
  16. UnicodeString.Length = 0;
  17. // Build up our registry query table
  18. RTL_QUERY_REGISTRY_TABLE QueryTable[4];
  19. RtlZeroMemory( QueryTable, sizeof(QueryTable));
  20. QueryTable[0].Name  = L"Parameters";
  21. QueryTable[0].Flags = RTL_QUERY_REGISTRY_SUBKEY;
  22. QueryTable[0].EntryContext = NULL;
  23. QueryTable[1].Name  = L"UlongValue";
  24. QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
  25. QueryTable[1].EntryContext = &UlongValue;
  26. QueryTable[2].Name  = L""; // Default value
  27. QueryTable[2].Flags = RTL_QUERY_REGISTRY_DIRECT;
  28. QueryTable[2].EntryContext = &UnicodeString;
  29. // Issue query
  30. NTSTATUS status = RtlQueryRegistryValues(
  31.    RTL_REGISTRY_ABSOLUTE, (PWSTR)wstrDriverRegistryPath,
  32.    QueryTable, NULL, NULL);
  33. // Print results
  34. DebugPrint( "ReadReg %x: UlongValue %x UnicodeString %T",
  35. status, UlongValue, &UnicodeString);
  36. // Do not forget to free our buffer
  37. ExFreePool(wstrDriverRegistryPath);
  38. }