KsepDbGetDriverShims
NTSTATUS __stdcall KsepDbGetDriverShims(
_UNICODE_STRING *DriverImageName,
VOID *BaseAddress,
UINT64 ImageSize,
_UNICODE_STRING **ShimsOut,
UINT64 *ShimCount){
_UNICODE_STRING *v7;
size_t v8;
NTSTATUS v9;
_QWORD *v10;
NTSTATUS v11;
NTSTATUS DriverShimsInternal;
__int64 v13;
VOID *v14;
_UNICODE_STRING *v16;
INT64 a5;
INT64 a5a;
INT64 a7;
INT64 a6;
INT64 v21;
PVOID DbHandleOut;
_UNICODE_STRING *a3a;
int v26;
v26 = ImageSize;
a6 = 0i64;
v21 = 0i64;
v7 = 0i64;
v8 = 0;
a7 = 0i64;
DbHandleOut = 0i64;
if( !DriverImageName || !ShimsOut )
return -1073741811;
*ShimsOut = 0i64;
*(_DWORD *)ShimCount = 0;
v9 = KseShimDatabaseOpen(&DbHandleOut);
v10 = DbHandleOut;
v11 = v9;
if( v9 >= 0 )
{
LODWORD(a5) = v26;
DriverShimsInternal = KsepDbGetDriverShimsInternal(
*(VOID **)DbHandleOut,
(INT64)&KsepMatchMachineInfo,
(INT64)DriverImageName,
BaseAddress,
a5,
(INT64)&a6,
(INT64)&a7 + 4);
v13 = HIDWORD(a7);
v11 = DriverShimsInternal;
if( (int)(DriverShimsInternal + 0x80000000) >= 0 && DriverShimsInternal != -1073741275 )
goto LABEL_9;
v14 = (VOID *)v10[7];
if( v14 )
{
LODWORD(a5a) = v26;
v11 = KsepDbGetDriverShimsInternal(
v14,
(INT64)&KsepMatchMachineInfo,
(INT64)DriverImageName,
BaseAddress,
a5a,
(INT64)&v21,
(INT64)&a7);
if( (int)(v11 + 0x80000000) >= 0 && v11 != -1073741275 )
{
v7 = (_UNICODE_STRING *)v21;
v8 = a7;
goto LABEL_9;
}
v7 = (_UNICODE_STRING *)v21;
v8 = a7;
}
if( (_DWORD)v13 )
{
if( v8 )
{
a3a = (_UNICODE_STRING *)KsepPoolAllocatePaged(80i64 * (v8 + (unsigned int)v13));
if( !a3a )
{
v11 = -1073741801;
goto LABEL_9;
}
memmove(a3a, (const VOID *)a6, 80 * v13);
memmove(&a3a[5 * v13], v7, v8);
*ShimsOut = a3a;
*(_DWORD *)ShimCount = v8 + v13;
}
else
{
v16 = (_UNICODE_STRING *)a6;
a6 = 0i64;
*ShimsOut = v16;
*(_DWORD *)ShimCount = v13;
}
}
else
{
if( !v8 )
{
v11 = -1073741275;
LABEL_9:
if( a6 )
KsepDbFreeDriverShims((_KSE_SHIM_INFO *)a6, (unsigned int)v13);
if( v7 )
KsepDbFreeDriverShims((_KSE_SHIM_INFO *)v7, v8);
goto LABEL_13;
}
*ShimsOut = v7;
v7 = 0i64;
*(_DWORD *)ShimCount = v8;
}
v11 = 0;
goto LABEL_9;
}
LABEL_13:
if( v10 )
KseShimDatabaseClose(v10);
return v11;
}Referenced by:
KsepGetShimsForDriver