NtSetInformationObject
NTSTATUS __stdcall NtSetInformationObject(
PVOID Handle,
OBJECT_INFORMATION_CLASS ObjectInformationClass,
PVOID ObjectInformation,
UINT64 ObjectInformationLength){
int v5;
__int32 v6;
char v7;
__int32 v9;
KPROCESSOR_MODE v10;
unsigned int CurrentProcessSessionId;
struct _DMA_ADAPTER *v12;
struct _DMA_ADAPTER *v13;
struct _DMA_ADAPTER *v14;
_OBP_LOOKUP_CONTEXT *p_LookupContext;
KPROCESSOR_MODE v16;
PVOID Object;
PVOID v18;
struct _OBJECT_HANDLE_INFORMATION HandleInformation;
struct _OBJECT_HANDLE_INFORMATION v20;
_OBP_LOOKUP_CONTEXT LookupContext;
_OBP_LOOKUP_CONTEXT v22;
__int16 v23;
v23 = 0;
v5 = -1073741821;
v6 = ObjectInformationClass - 4;
if( v6 )
{
v9 = v6 - 1;
if( v9 )
{
if( v9 != 1 )
return v5;
v10 = *((_BYTE *)KeGetCurrentThread() + 562);
if( SeSinglePrivilegeCheck(*(_QWORD *)&SeTcbPrivilege, v10) )
{
HandleInformation = 0i64;
Object = 0i64;
v5 = ObReferenceObjectByHandle(Handle, 0, ObpDirectoryObjectType, v10, &Object, &HandleInformation);
if( v5 >= 0 )
{
CurrentProcessSessionId = PsGetCurrentProcessSessionId();
LODWORD(v12) = MmGetSessionObjectById(CurrentProcessSessionId);
v13 = v12;
v14 = (struct _DMA_ADAPTER *)Object;
if( !v12 )
{
v5 = -1073740715;
goto LABEL_18;
}
*(&LookupContext.LockStateSignature + 1) = 0;
memset(&LookupContext, 0, 32);
LookupContext.LockStateSignature = -60876;
ObpLockDirectoryExclusive(&LookupContext, (_OBJECT_DIRECTORY *)Object);
if( v14[20].DmaOperations )
{
v5 = -1073741790;
HalPutDmaAdapter(v13);
}
else
{
v14[20].DmaOperations = (_DMA_OPERATIONS *)v13;
}
p_LookupContext = &LookupContext;
LABEL_17:
ObpUnlockDirectory((INT64)v14, (INT64)p_LookupContext);
LABEL_18:
HalPutDmaAdapter(v14);
}
return v5;
}
}
else
{
v16 = *((_BYTE *)KeGetCurrentThread() + 562);
if( SeSinglePrivilegeCheck(*(_QWORD *)&SeTcbPrivilege, v16) )
{
v20 = 0i64;
v18 = 0i64;
v5 = ObReferenceObjectByHandle(Handle, 0, ObpDirectoryObjectType, v16, &v18, &v20);
if( v5 < 0 )
return v5;
*(&v22.LockStateSignature + 1) = 0;
memset(&v22, 0, 32);
v22.LockStateSignature = -60876;
v14 = (struct _DMA_ADAPTER *)v18;
ObpLockDirectoryExclusive(&v22, (_OBJECT_DIRECTORY *)v18);
*(_DWORD *)(&v14[21].Size + 1) = PsGetCurrentProcessSessionId();
p_LookupContext = &v22;
goto LABEL_17;
}
}
return -1073741727;
}
if( (_DWORD)ObjectInformationLength == 2 )
{
v7 = *((_BYTE *)KeGetCurrentThread() + 562);
if( v7
&& ((unsigned __int64)ObjectInformation + 2 > 0x7FFFFFFF0000i64
|| (char *)ObjectInformation + 2 < ObjectInformation) )
{
MEMORY[0x7FFFFFFF0000] = 0;
}
v23 = *(_WORD *)ObjectInformation;
return ObSetHandleAttributes((unsigned __int64)Handle, &v23, v7);
}
return -1073741820;
}Referenced by:
No references.