ntdll: Return STATUS_DEBUGGER_INACTIVE from NtSystemDebugControl() stub.
This commit is contained in:
parent
9dc1ddf801
commit
7bd070ae86
4 changed files with 71 additions and 3 deletions
|
@ -46,6 +46,7 @@ static NTSTATUS (WINAPI * pNtSetInformationDebugObject)(HANDLE,DEBUGOBJECTINFOCL
|
||||||
static NTSTATUS (WINAPI * pDbgUiConvertStateChangeStructure)(DBGUI_WAIT_STATE_CHANGE*,DEBUG_EVENT*);
|
static NTSTATUS (WINAPI * pDbgUiConvertStateChangeStructure)(DBGUI_WAIT_STATE_CHANGE*,DEBUG_EVENT*);
|
||||||
static HANDLE (WINAPI * pDbgUiGetThreadDebugObject)(void);
|
static HANDLE (WINAPI * pDbgUiGetThreadDebugObject)(void);
|
||||||
static void (WINAPI * pDbgUiSetThreadDebugObject)(HANDLE);
|
static void (WINAPI * pDbgUiSetThreadDebugObject)(HANDLE);
|
||||||
|
static NTSTATUS (WINAPI * pNtSystemDebugControl)(SYSDBG_COMMAND,PVOID,ULONG,PVOID,ULONG,PULONG);
|
||||||
|
|
||||||
static BOOL is_wow64;
|
static BOOL is_wow64;
|
||||||
static BOOL old_wow64;
|
static BOOL old_wow64;
|
||||||
|
@ -101,6 +102,7 @@ static void InitFunctionPtrs(void)
|
||||||
NTDLL_GET_PROC(DbgUiConvertStateChangeStructure);
|
NTDLL_GET_PROC(DbgUiConvertStateChangeStructure);
|
||||||
NTDLL_GET_PROC(DbgUiGetThreadDebugObject);
|
NTDLL_GET_PROC(DbgUiGetThreadDebugObject);
|
||||||
NTDLL_GET_PROC(DbgUiSetThreadDebugObject);
|
NTDLL_GET_PROC(DbgUiSetThreadDebugObject);
|
||||||
|
NTDLL_GET_PROC(NtSystemDebugControl);
|
||||||
|
|
||||||
if (!IsWow64Process( GetCurrentProcess(), &is_wow64 )) is_wow64 = FALSE;
|
if (!IsWow64Process( GetCurrentProcess(), &is_wow64 )) is_wow64 = FALSE;
|
||||||
|
|
||||||
|
@ -3735,6 +3737,27 @@ static void test_ThreadIsTerminated(void)
|
||||||
ok( status == STATUS_INVALID_HANDLE, "got %#lx.\n", status );
|
ok( status == STATUS_INVALID_HANDLE, "got %#lx.\n", status );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_system_debug_control(void)
|
||||||
|
{
|
||||||
|
NTSTATUS status;
|
||||||
|
int class;
|
||||||
|
|
||||||
|
for (class = 0; class < SysDbgMaxInfoClass; ++class)
|
||||||
|
{
|
||||||
|
status = pNtSystemDebugControl( class, NULL, 0, NULL, 0, NULL );
|
||||||
|
if (is_wow64)
|
||||||
|
{
|
||||||
|
/* Most of the calls return STATUS_NOT_IMPLEMENTED on wow64. */
|
||||||
|
ok( status == STATUS_DEBUGGER_INACTIVE || status == STATUS_NOT_IMPLEMENTED || status == STATUS_INFO_LENGTH_MISMATCH,
|
||||||
|
"class %d, got %#lx.\n", class, status );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ok( status == STATUS_DEBUGGER_INACTIVE || status == STATUS_ACCESS_DENIED, "class %d, got %#lx.\n", class, status );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(info)
|
START_TEST(info)
|
||||||
{
|
{
|
||||||
char **argv;
|
char **argv;
|
||||||
|
@ -3810,4 +3833,5 @@ START_TEST(info)
|
||||||
|
|
||||||
test_ThreadEnableAlignmentFaultFixup();
|
test_ThreadEnableAlignmentFaultFixup();
|
||||||
test_process_instrumentation_callback();
|
test_process_instrumentation_callback();
|
||||||
|
test_system_debug_control();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3461,7 +3461,8 @@ NTSTATUS WINAPI NtSystemDebugControl( SYSDBG_COMMAND command, void *in_buff, ULO
|
||||||
{
|
{
|
||||||
FIXME( "(%d, %p, %d, %p, %d, %p), stub\n",
|
FIXME( "(%d, %p, %d, %p, %d, %p), stub\n",
|
||||||
command, in_buff, (int)in_len, out_buff, (int)out_len, retlen );
|
command, in_buff, (int)in_len, out_buff, (int)out_len, retlen );
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
|
||||||
|
return STATUS_DEBUGGER_INACTIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -755,7 +755,30 @@ NTSTATUS WINAPI wow64_NtSystemDebugControl( UINT *args )
|
||||||
ULONG out_len = get_ulong( &args );
|
ULONG out_len = get_ulong( &args );
|
||||||
ULONG *retlen = get_ptr( &args );
|
ULONG *retlen = get_ptr( &args );
|
||||||
|
|
||||||
return NtSystemDebugControl( command, in_buf, in_len, out_buf, out_len, retlen );
|
switch (command)
|
||||||
|
{
|
||||||
|
case SysDbgBreakPoint:
|
||||||
|
case SysDbgEnableKernelDebugger:
|
||||||
|
case SysDbgDisableKernelDebugger:
|
||||||
|
case SysDbgGetAutoKdEnable:
|
||||||
|
case SysDbgSetAutoKdEnable:
|
||||||
|
case SysDbgGetPrintBufferSize:
|
||||||
|
case SysDbgSetPrintBufferSize:
|
||||||
|
case SysDbgGetKdUmExceptionEnable:
|
||||||
|
case SysDbgSetKdUmExceptionEnable:
|
||||||
|
case SysDbgGetTriageDump:
|
||||||
|
case SysDbgGetKdBlockEnable:
|
||||||
|
case SysDbgSetKdBlockEnable:
|
||||||
|
case SysDbgRegisterForUmBreakInfo:
|
||||||
|
case SysDbgGetUmBreakPid:
|
||||||
|
case SysDbgClearUmBreakPid:
|
||||||
|
case SysDbgGetUmAttachPid:
|
||||||
|
case SysDbgClearUmAttachPid:
|
||||||
|
return NtSystemDebugControl( command, in_buf, in_len, out_buf, out_len, retlen );
|
||||||
|
|
||||||
|
default:
|
||||||
|
return STATUS_NOT_IMPLEMENTED; /* not implemented on Windows either */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3603,7 +3603,27 @@ typedef enum _SYSDBG_COMMAND {
|
||||||
SysDbgReadMsr,
|
SysDbgReadMsr,
|
||||||
SysDbgWriteMsr,
|
SysDbgWriteMsr,
|
||||||
SysDbgReadBusData,
|
SysDbgReadBusData,
|
||||||
SysDbgWriteBusData
|
SysDbgWriteBusData,
|
||||||
|
SysDbgCheckLowMemory,
|
||||||
|
SysDbgEnableKernelDebugger,
|
||||||
|
SysDbgDisableKernelDebugger,
|
||||||
|
SysDbgGetAutoKdEnable,
|
||||||
|
SysDbgSetAutoKdEnable,
|
||||||
|
SysDbgGetPrintBufferSize,
|
||||||
|
SysDbgSetPrintBufferSize,
|
||||||
|
SysDbgGetKdUmExceptionEnable,
|
||||||
|
SysDbgSetKdUmExceptionEnable,
|
||||||
|
SysDbgGetTriageDump,
|
||||||
|
SysDbgGetKdBlockEnable,
|
||||||
|
SysDbgSetKdBlockEnable,
|
||||||
|
SysDbgRegisterForUmBreakInfo,
|
||||||
|
SysDbgGetUmBreakPid,
|
||||||
|
SysDbgClearUmBreakPid,
|
||||||
|
SysDbgGetUmAttachPid,
|
||||||
|
SysDbgClearUmAttachPid,
|
||||||
|
SysDbgGetLiveKernelDump,
|
||||||
|
SysDbgKdPullRemoteFile,
|
||||||
|
SysDbgMaxInfoClass
|
||||||
} SYSDBG_COMMAND, *PSYSDBG_COMMAND;
|
} SYSDBG_COMMAND, *PSYSDBG_COMMAND;
|
||||||
|
|
||||||
typedef struct _CPTABLEINFO
|
typedef struct _CPTABLEINFO
|
||||||
|
|
Loading…
Add table
Reference in a new issue