DrvDbGetConfigurationSubKeyCallback
PNPCTX_REG_ENUM_KEY_ACTION __stdcall DrvDbGetConfigurationSubKeyCallback(
HPNPCTX *hPnpCtx,
VOID *ParentKeyHandle,
WCHAR *KeyName,
VOID *Context){
PNPCTX_REG_ENUM_KEY_ACTION v4;
unsigned __int64 v7;
NTSTATUS v8;
INT64 v9;
INT64 v10;
NTSTATUS v11;
__int64 v12;
__int64 v13;
__int64 v14;
__int64 v15;
UINT64 DesiredAccess;
INT64 DesiredAccessa;
VOID **phkResult;
UINT64 RegType;
INT64 v21;
_HANDLE v22[2];
int Data;
__int16 pszDest[12];
v4 = 0;
*(_QWORD *)v22 = 0i64;
LODWORD(v21) = 0;
Data = 0;
LODWORD(RegType) = 0;
if( !Context )
return 3;
LODWORD(DesiredAccess) = 1;
v8 = PnpCtxRegOpenKey(hPnpCtx, ParentKeyHandle, KeyName, 0i64, DesiredAccess, (VOID **)v22);
if( v8 >= 0 )
{
HIDWORD(RegType) = 4;
if( *((_BYTE *)Context + 16) )
{
v11 = PnpCtxRegQueryValue(
(HPNPCTX *)v7,
*(VOID **)v22,
(WCHAR *)L"ConfigScope",
&RegType,
&v21,
(UINT64 *)((char *)&RegType + 4));
v8 = v11;
if( v11 < 0 || RegType != 0x400000004i64 )
{
if( v11 == -1073741772 )
v8 = 0;
goto LABEL_30;
}
}
else
{
v8 = PnpCtxRegQueryValue(
(HPNPCTX *)v7,
*(VOID **)v22,
(WCHAR *)L"ConfigFlags",
&RegType,
&Data,
(UINT64 *)((char *)&RegType + 4));
if( v8 < 0 || RegType != 0x400000004i64 )
{
if( v8 == -1073741772 )
v8 = 0;
goto LABEL_30;
}
}
v12 = -1i64;
v13 = -1i64;
do
++v13;
while( KeyName[v13] );
v14 = *((unsigned int *)Context + 3);
if( *((_DWORD *)Context + 2) < (unsigned int)(v14 + v13) )
{
v8 = -1073741789;
}
else
{
memmove((VOID *)(*(_QWORD *)Context + 2 * v14), KeyName, 2 * v13);
LODWORD(v14) = *((_DWORD *)Context + 3);
}
v7 = (unsigned int)(v13 + v14);
*((_DWORD *)Context + 3) = v7;
if( !*((_BYTE *)Context + 16) )
{
LABEL_24:
if( *((_DWORD *)Context + 2) < (unsigned int)(v7 + 1) )
{
v8 = -1073741789;
}
else
{
*(_WORD *)(*(_QWORD *)Context + 2 * v7) = 0;
v7 = *((unsigned int *)Context + 3);
}
*((_DWORD *)Context + 3) = v7 + 1;
goto LABEL_30;
}
if( *((_DWORD *)Context + 2) >= (unsigned int)(v7 + 1) )
{
*(_WORD *)(*(_QWORD *)Context + 2 * v7) = 58;
LODWORD(v7) = *((_DWORD *)Context + 3);
}
*((_DWORD *)Context + 3) = v7 + 1;
v8 = RtlStringCchPrintfW((WCHAR *)pszDest, 9ui64, (WCHAR *)L"%X");
if( v8 >= 0 )
{
do
++v12;
while( pszDest[v12] );
v15 = *((unsigned int *)Context + 3);
if( *((_DWORD *)Context + 2) < (unsigned int)(v15 + v12) )
{
v8 = -1073741789;
}
else
{
memmove((VOID *)(*(_QWORD *)Context + 2 * v15), pszDest, 2 * v12);
LODWORD(v15) = *((_DWORD *)Context + 3);
}
v7 = (unsigned int)(v12 + v15);
*((_DWORD *)Context + 3) = v7;
goto LABEL_24;
}
}
LABEL_30:
if( *(_QWORD *)v22 )
PnpCtxRegCloseKey((HPNPCTX *)v7, *(VOID **)v22, v9, v10, DesiredAccessa, (INT64)phkResult, RegType, v21);
if( v8 < 0 )
{
*((_DWORD *)Context + 5) = v8;
if( v8 != -1073741789 )
return 3;
}
return v4;
}Referenced by:
No references.