CmOpenKey
INT64 __fastcall CmOpenKey(
VOID **KeyHandle,
INT64 DesiredAccess,
_OBJECT_ATTRIBUTES *ObjectAttributes,
INT64 OpenOptions,
_CM_TRANS_PTR Trans,
INT64 a6,
INT64 a7,
INT64 a8){
int v8;
int v10;
unsigned int v12;
__int64 v13;
char v14;
__int64 v15;
unsigned __int64 ObjectName;
int v17;
unsigned __int64 v18;
unsigned __int64 v19;
NTSTATUS v20;
KPROCESSOR_MODE v22;
__int64 v23;
HANDLE RootDirectory;
HANDLE Handle;
PVOID Object;
__int64 v27;
_UNICODE_STRING v28;
int v29;
VOID **v30;
_OBJECT_ATTRIBUTES *v31;
_UNICODE_STRING v32;
LARGE_INTEGER v33[2];
__int128 v34;
INT64 result[3];
int v36;
int v37;
_CM_TRANS_PTR v38;
int v39;
_QWORD v40[9];
__int128 v41;
__int128 v42;
__int128 v43;
__int128 v44;
__int128 v45;
v8 = OpenOptions;
v10 = DesiredAccess;
v30 = KeyHandle;
v31 = ObjectAttributes;
Handle = 0i64;
v28 = 0i64;
v29 = 0;
*(_OWORD *)&v33[0].LowPart = 0i64;
v34 = 0i64;
v27 = 0i64;
if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
EtwGetKernelTraceTimestamp(v33, 0x20000ui64);
memset((INT64)result, 0i64);
v39 = -1;
v40[1] = v40;
v40[0] = v40;
v41 = 0i64;
v42 = 0i64;
v43 = 0i64;
v44 = 0i64;
v45 = 0i64;
v37 = v10 & 0x300;
v12 = v10 & 0xFFFFFCFF;
if( CmpAcquireShutdownRundown() )
{
if( (v8 & 0x1C) == v8 )
{
v14 = *((_BYTE *)KeGetCurrentThread() + 562);
if( v14 == 1 )
{
v15 = (__int64)KeyHandle;
if( (unsigned __int64)KeyHandle >= 0x7FFFFFFF0000i64 )
v15 = 0x7FFFFFFF0000i64;
*(_QWORD *)v15 = 0i64;
if( ((unsigned __int8)ObjectAttributes & 3) != 0 )
ExRaiseDatatypeMisalignment();
ObjectName = (unsigned __int64)ObjectAttributes->ObjectName;
v32 = 0i64;
if( ObjectName >= 0x7FFFFFFF0000i64 )
ObjectName = 0x7FFFFFFF0000i64;
v17 = *(_DWORD *)ObjectName;
*(_DWORD *)&v32.Length = v17;
v18 = *(_QWORD *)(ObjectName + 8);
v32.Buffer = (wchar_t *)v18;
v28 = v32;
if( (_WORD)v17 )
{
if( (v18 & 1) != 0 )
ExRaiseDatatypeMisalignment();
v19 = v18 + (unsigned __int16)v17;
if( v19 > 0x7FFFFFFF0000i64 || v19 < v18 )
MEMORY[0x7FFFFFFF0000] = 0;
}
}
else
{
v28 = *ObjectAttributes->ObjectName;
}
RootDirectory = ObjectAttributes->RootDirectory;
if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
{
if( ObjectAttributes->RootDirectory )
{
v22 = *((_BYTE *)KeGetCurrentThread() + 562);
Object = 0i64;
if( ObReferenceObjectByHandle(RootDirectory, 0, (POBJECT_TYPE)CmKeyObjectType, v22, &Object, 0i64) >= 0 )
{
v27 = *((_QWORD *)Object + 1);
HalPutDmaAdapter((PADAPTER_OBJECT)Object);
}
}
}
v38.0 = Trans.0;
v36 = v8;
v20 = ObOpenObjectByName(
(__int64)ObjectAttributes,
(__int64)CmKeyObjectType,
v14,
0i64,
v12,
(__int64)result,
&Handle);
if( v20 >= 0 )
*KeyHandle = Handle;
if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
{
v23 = v27;
LOBYTE(v23) = 11;
(*(void(__fastcall **)(__int64, LARGE_INTEGER *, _QWORD, _QWORD, __int64, _UNICODE_STRING *))((char *)&NlsMbCodePageTag + 7))(
v23,
v33,
(unsigned int)v20,
0i64,
v27,
&v28);
}
CmpCleanupParseContext((__int64)result, 0);
CmpReleaseShutdownRundown();
return(unsigned int)v20;
}
else
{
CmpReleaseShutdownRundown();
return 3221225714i64;
}
}
else
{
if( *(BOOLEAN **)((char *)&NlsMbCodePageTag + 7) )
{
LOBYTE(v13) = 11;
(*(void(__fastcall **)(__int64, LARGE_INTEGER *, __int64, _QWORD, _QWORD, _QWORD))((char *)&NlsMbCodePageTag + 7))(
v13,
v33,
3221225865i64,
0i64,
0i64,
0i64);
}
return 3221225865i64;
}
}Referenced by:
AdtpObjsInitialize
ExpWatchLicenseInfoWork
ExpWatchProductTypeWork
NtOpenKeyTransactedEx