DbgkpOpenHandles
VOID __stdcall DbgkpOpenHandles(_DBGUI_WAIT_STATE_CHANGE *WaitStateChange, VOID *Process, VOID *Thread){
VOID *v5;
_EPROCESS *v6;
_DBGUI_WAIT_STATE_CHANGE *v7;
_EPROCESS *v8;
_DBGUI_WAIT_STATE_CHANGE *v9;
_OBJECT_TYPE *ObjectType;
_OBJECT_TYPE *ObjectTypea;
INT64 AccessMode;
_KPROCESSOR_MODE AccessModea;
INT64 AccessModeb;
VOID **Handle;
VOID **Handlea;
switch( *WaitStateChange )
{
case 2:
v9 = WaitStateChange + 6;
LOBYTE(AccessMode) = 0;
if( ObOpenObjectByPointer(
Thread,
0i64,
0i64,
1179771,
(POBJECT_TYPE)PsThreadType,
AccessMode,
(VOID **)WaitStateChange + 3) < 0 )
*(_QWORD *)v9 = 0i64;
break;
case 3:
v7 = WaitStateChange + 8;
LOBYTE(AccessMode) = 0;
if( ObOpenObjectByPointer(
Thread,
0i64,
0i64,
1179771,
(POBJECT_TYPE)PsThreadType,
AccessMode,
(VOID **)WaitStateChange + 4) < 0 )
*(_QWORD *)v7 = 0i64;
LOBYTE(AccessModea) = 0;
if( ObOpenObjectByPointer(
Process,
0i64,
0i64,
1181307,
(POBJECT_TYPE)PsProcessType,
AccessModea,
(VOID **)WaitStateChange + 3) < 0 )
*((_QWORD *)WaitStateChange + 3) = 0i64;
v5 = (VOID *)*((_QWORD *)WaitStateChange + 6);
if( v5 )
{
LODWORD(Handlea) = 2;
LODWORD(AccessModeb) = 0;
LODWORD(ObjectTypea) = 0;
v8 = KeGetCurrentThread()->ApcState.Process;
if( ObDuplicateObject(
(INT64)v8,
(UINT64)v5,
(INT64)v8,
(UINT64 *)WaitStateChange + 6,
(INT64)ObjectTypea,
AccessModeb,
(INT64)Handlea,
0) < 0 )
*((_QWORD *)WaitStateChange + 6) = 0i64;
goto LABEL_14;
}
break;
case 9:
v5 = (VOID *)*((_QWORD *)WaitStateChange + 3);
if( v5 )
{
LODWORD(Handle) = 2;
LODWORD(AccessMode) = 0;
LODWORD(ObjectType) = 0;
v6 = KeGetCurrentThread()->ApcState.Process;
if( ObDuplicateObject(
(INT64)v6,
(UINT64)v5,
(INT64)v6,
(UINT64 *)WaitStateChange + 3,
(INT64)ObjectType,
AccessMode,
(INT64)Handle,
0) < 0 )
*((_QWORD *)WaitStateChange + 3) = 0i64;
LABEL_14:
ObCloseHandle(v5, 0);
}
break;
}
}Referenced by:
NtWaitForDebugEvent