PipCommitPendingOsExtensionResource
NTSTATUS __stdcall PipCommitPendingOsExtensionResource(
WCHAR *ResourceId,
VOID *hPendingOsExtensionDbRoot,
VOID *hPendingExtensionResource,
VOID *Context,
INT64 _A0,
INT64 a6,
UINT8 _B0){
VOID *v10;
int CachedContextBaseKey;
UINT64 v12;
INT64 v13;
INT64 *DesiredAccess;
VOID **phkResult;
INT64 a7;
INT64 v18;
INT64 a5;
VOID *TargetKeyHandle;
VOID *hKey;
_HANDLE v22[2];
_HANDLE pSecurityDescriptor[2];
a5 = 0i64;
hKey = 0i64;
TargetKeyHandle = 0i64;
*(_QWORD *)v22 = 0i64;
*(_QWORD *)pSecurityDescriptor = 0i64;
CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(
*(&stru_140CF2E80 + 607),
PNPCTX_BASE_KEY_TYPE_CONTROLSET,
(VOID **)&a5);
if( CachedContextBaseKey >= 0 )
{
if( !hPendingOsExtensionDbRoot )
{
LODWORD(DesiredAccess) = 131103;
CachedContextBaseKey = PnpCtxRegOpenKey(
*(&stru_140CF2E80 + 607),
(VOID *)a5,
(WCHAR *)L"Control\\PendingDriverOperations\\OsExtensionDatabase",
0i64,
(UINT64)DesiredAccess,
(VOID **)v22);
if( CachedContextBaseKey < 0 )
goto LABEL_14;
hPendingOsExtensionDbRoot = *(VOID **)v22;
}
if( !hPendingExtensionResource )
{
LODWORD(DesiredAccess) = 131097;
CachedContextBaseKey = PnpCtxRegOpenKey(
*(&stru_140CF2E80 + 607),
hPendingOsExtensionDbRoot,
ResourceId,
0i64,
(UINT64)DesiredAccess,
(VOID **)pSecurityDescriptor);
if( CachedContextBaseKey < 0 )
goto LABEL_14;
hPendingExtensionResource = *(VOID **)pSecurityDescriptor;
}
LODWORD(DesiredAccess) = 131078;
CachedContextBaseKey = PnpCtxRegCreateKey(
*(&stru_140CF2E80 + 607),
(VOID *)a5,
(WCHAR *)L"Control\\OsExtensionDatabase",
0i64,
(UINT64)DesiredAccess,
0i64,
&hKey,
0i64);
if( CachedContextBaseKey >= 0 )
{
LODWORD(DesiredAccess) = 131078;
CachedContextBaseKey = PnpCtxRegCreateKey(
*(&stru_140CF2E80 + 607),
hKey,
ResourceId,
0i64,
(UINT64)DesiredAccess,
0i64,
&TargetKeyHandle,
0i64);
if( CachedContextBaseKey >= 0 )
{
CachedContextBaseKey = PiDevCfgCopyDeviceKeys(hPendingExtensionResource, TargetKeyHandle, v12, 0i64);
if( CachedContextBaseKey >= 0 )
{
CachedContextBaseKey = PnpCtxRegDeleteTree(*(&stru_140CF2E80 + 607), hPendingOsExtensionDbRoot, ResourceId);
if( CachedContextBaseKey >= 0 )
{
LODWORD(a5) = 0;
DesiredAccess = &a5;
if( PnpCtxRegEnumKey(v10, (UINT64)hPendingOsExtensionDbRoot, 0i64, 0i64) == -2147483622 )
PnpCtxRegDeleteKey(*(&stru_140CF2E80 + 607), hPendingOsExtensionDbRoot, 0i64);
}
}
}
}
}
LABEL_14:
if( TargetKeyHandle )
PnpCtxRegCloseKey((HPNPCTX *)v10, TargetKeyHandle, v12, v13, (INT64)DesiredAccess, (INT64)phkResult, a7, v18);
if( hKey )
PnpCtxRegCloseKey((HPNPCTX *)v10, hKey, v12, v13, (INT64)DesiredAccess, (INT64)phkResult, a7, v18);
if( *(_QWORD *)v22 )
PnpCtxRegCloseKey((HPNPCTX *)v10, *(VOID **)v22, v12, v13, (INT64)DesiredAccess, (INT64)phkResult, a7, v18);
if( *(_QWORD *)pSecurityDescriptor )
PnpCtxRegCloseKey(
(HPNPCTX *)v10,
*(VOID **)pSecurityDescriptor,
v12,
v13,
(INT64)DesiredAccess,
(INT64)phkResult,
a7,
v18);
return CachedContextBaseKey;
}Referenced by:
No references.