在驱动里从注册表里读写参数
摘自ramdisk驱动程序
VOID
RamDiskQueryDebugRegParameters(
IN PUNICODE_STRING RegistryPath
)
/*++
Routine Description:
This routine is called from the DriverEntry to get the debug
parameters from the registry. If the registry query fails, then
default values are used.
Arguments:
RegistryPath - Points the service path to get the registry parameters
Return Value:
None
--*/
{
RTL_QUERY_REGISTRY_TABLE rtlQueryRegTbl[ 4 + 1 ]; // Need 1 for NULL
NTSTATUS status;
DEBUG_INFO defDebugRegInfo;
PAGED_CODE();
DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_VERBOSE, ("QueryDebugRegParameters\n" ) );
ASSERT( RegistryPath->Buffer != NULL );
// Set the default values
defDebugRegInfo.BreakOnEntry = DEFAULT_BREAK_ON_ENTRY;
defDebugRegInfo.DebugLevel = DEFAULT_DEBUG_LEVEL;
defDebugRegInfo.DebugComp = DEFAULT_DEBUG_COMP;
RtlZeroMemory( rtlQueryRegTbl, sizeof(rtlQueryRegTbl) );
//
// Setup the query table
//
rtlQueryRegTbl[0].Flags = RTL_QUERY_REGISTRY_SUBKEY;
rtlQueryRegTbl[0].Name = L"Parameters";
rtlQueryRegTbl[0].EntryContext = NULL;
rtlQueryRegTbl[0].DefaultType = (ULONG)NULL;
rtlQueryRegTbl[0].DefaultData = NULL;
rtlQueryRegTbl[0].DefaultLength = (ULONG)NULL;
//
// Debug paramters
//
rtlQueryRegTbl[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
rtlQueryRegTbl[1].Name = L"BreakOnEntry";
rtlQueryRegTbl[1].EntryContext = &BreakOnEntry;
rtlQueryRegTbl[1].DefaultType = REG_DWORD;
rtlQueryRegTbl[1].DefaultData = &defDebugRegInfo.BreakOnEntry;
rtlQueryRegTbl[1].DefaultLength = sizeof(ULONG);
rtlQueryRegTbl[2].Flags = RTL_QUERY_REGISTRY_DIRECT;
rtlQueryRegTbl[2].Name = L"DebugLevel";
rtlQueryRegTbl[2].EntryContext = &DbgLevel;
rtlQueryRegTbl[2].DefaultType = REG_DWORD;
rtlQueryRegTbl[2].DefaultData = &defDebugRegInfo.DebugLevel;
rtlQueryRegTbl[2].DefaultLength = sizeof(ULONG);
rtlQueryRegTbl[3].Flags = RTL_QUERY_REGISTRY_DIRECT;
rtlQueryRegTbl[3].Name = L"DebugComp";
rtlQueryRegTbl[3].EntryContext = &DbgComp;
rtlQueryRegTbl[3].DefaultType = REG_DWORD;
rtlQueryRegTbl[3].DefaultData = &defDebugRegInfo.DebugComp;
rtlQueryRegTbl[3].DefaultLength = sizeof(ULONG);
status = RtlQueryRegistryValues(
RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL,
RegistryPath->Buffer,
rtlQueryRegTbl,
NULL,
NULL
);
if ( !NT_SUCCESS( status ) ) {
DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_WARN, ("RrlQueryRegistryValues returned 0x%x\n", status ) );
BreakOnEntry = defDebugRegInfo.BreakOnEntry;
DbgLevel = defDebugRegInfo.DebugLevel;
DbgComp = defDebugRegInfo.DebugComp;
}
DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_INFO, ("BreakOnEntry = 0x%lx\n", BreakOnEntry) );
DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_INFO, ("DebugLevel = 0x%lx\n", DbgLevel) );
DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_INFO, ("DebugComp = 0x%lx\n", DbgComp) );
return;
} // End of RamDiskDebugQueryRegParameters()

浙公网安备 33010602011771号