diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 1bff52a299d..c3d17d989ac 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -414,6 +414,7 @@ @ stdcall -syscall NtTerminateProcess(long long) @ stdcall -syscall NtTerminateThread(long long) @ stdcall -syscall NtTestAlert() +@ stdcall -syscall NtTraceControl(long ptr long ptr long long) # @ stub NtTraceEvent # @ stub NtTranslateFilePath @ stdcall -syscall NtUnloadDriver(ptr) @@ -1435,6 +1436,7 @@ @ stdcall -private -syscall ZwTerminateProcess(long long) NtTerminateProcess @ stdcall -private -syscall ZwTerminateThread(long long) NtTerminateThread @ stdcall -private -syscall ZwTestAlert() NtTestAlert +@ stdcall -private -syscall ZwTraceControl(long ptr long ptr long long) NtTraceControl # @ stub ZwTraceEvent # @ stub ZwTranslateFilePath @ stdcall -private -syscall ZwUnloadDriver(ptr) NtUnloadDriver diff --git a/dlls/ntdll/unix/debug.c b/dlls/ntdll/unix/debug.c index d43cdaeb917..a2a63b5a9f4 100644 --- a/dlls/ntdll/unix/debug.c +++ b/dlls/ntdll/unix/debug.c @@ -34,6 +34,8 @@ # include #endif +#include "ntstatus.h" +#define WIN32_NO_STATUS #include "windef.h" #include "winnt.h" #include "winternl.h" @@ -42,6 +44,7 @@ WINE_DECLARE_DEBUG_CHANNEL(pid); WINE_DECLARE_DEBUG_CHANNEL(timestamp); +WINE_DEFAULT_DEBUG_CHANNEL(ntdll); struct debug_info { @@ -328,3 +331,15 @@ void dbg_init(void) options[nb_debug_options] = default_option; init_done = TRUE; } + + +/*********************************************************************** + * NtTraceControl (NTDLL.@) + */ +NTSTATUS WINAPI NtTraceControl( ULONG code, void *inbuf, ULONG inbuf_len, + void *outbuf, ULONG outbuf_len, ULONG *size ) +{ + FIXME( "code %u, inbuf %p, inbuf_len %u, outbuf %p, outbuf_len %u, size %p\n", code, inbuf, inbuf_len, + outbuf, outbuf_len, size ); + return STATUS_SUCCESS; +} diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index f51833b91a0..071dae6ceca 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -818,6 +818,7 @@ @ stdcall NtSetSecurityObject(long long ptr) @ stdcall NtSetVolumeInformationFile(long ptr ptr long long) @ stdcall NtShutdownSystem(long) +@ stdcall NtTraceControl(long ptr long ptr long long) @ stub NtTraceEvent @ stdcall NtUnlockFile(long ptr ptr ptr ptr) @ stub NtVdmControl @@ -1514,6 +1515,7 @@ @ stdcall -private ZwSetVolumeInformationFile(long ptr ptr long long) NtSetVolumeInformationFile @ stdcall -private ZwTerminateJobObject(long long) NtTerminateJobObject @ stdcall -private ZwTerminateProcess(long long) NtTerminateProcess +@ stdcall -private ZwTraceControl(long ptr long ptr long long) NtTraceControl @ stub ZwTranslateFilePath @ stdcall ZwUnloadDriver(ptr) @ stdcall -private ZwUnloadKey(ptr) NtUnloadKey diff --git a/dlls/wow64/sync.c b/dlls/wow64/sync.c index 2560fc10a0a..0078508fc7f 100644 --- a/dlls/wow64/sync.c +++ b/dlls/wow64/sync.c @@ -1481,6 +1481,22 @@ NTSTATUS WINAPI wow64_NtTestAlert( UINT *args ) } +/********************************************************************** + * wow64_NtTraceControl + */ +NTSTATUS WINAPI wow64_NtTraceControl( UINT *args ) +{ + ULONG code = get_ulong( &args ); + void *inbuf = get_ptr( &args ); + ULONG inbuf_len = get_ulong( &args ); + void *outbuf = get_ptr( &args ); + ULONG outbuf_len = get_ulong( &args ); + ULONG *size = get_ptr( &args ); + + return NtTraceControl( code, inbuf, inbuf_len, outbuf, outbuf_len, size ); +} + + /********************************************************************** * wow64_NtWaitForDebugEvent */ diff --git a/dlls/wow64/syscall.h b/dlls/wow64/syscall.h index d6c1b7c74fa..a565e9cda3a 100644 --- a/dlls/wow64/syscall.h +++ b/dlls/wow64/syscall.h @@ -228,6 +228,7 @@ SYSCALL_ENTRY( NtTerminateProcess ) \ SYSCALL_ENTRY( NtTerminateThread ) \ SYSCALL_ENTRY( NtTestAlert ) \ + SYSCALL_ENTRY( NtTraceControl ) \ SYSCALL_ENTRY( NtUnloadDriver ) \ SYSCALL_ENTRY( NtUnloadKey ) \ SYSCALL_ENTRY( NtUnlockFile ) \ diff --git a/include/winternl.h b/include/winternl.h index 06f00740e43..bc70121ac28 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -4009,7 +4009,7 @@ NTSYSAPI NTSTATUS WINAPI NtSetEvent(HANDLE,LONG*); NTSYSAPI NTSTATUS WINAPI NtSetHighEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetHighWaitLowEventPair(HANDLE); NTSYSAPI NTSTATUS WINAPI NtSetHighWaitLowThread(VOID); -NTSYSAPI NTSTATUS WINAPI NtSetInformationDebugObject(HANDLE,DEBUGOBJECTINFOCLASS,PVOID,ULONG,ULONG*); +NTSYSAPI NTSTATUS WINAPI NtSetInformationDebugObject(HANDLE,DEBUGOBJECTINFOCLASS,PVOID,ULONG,ULONG*); NTSYSAPI NTSTATUS WINAPI NtSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS); NTSYSAPI NTSTATUS WINAPI NtSetInformationJobObject(HANDLE,JOBOBJECTINFOCLASS,PVOID,ULONG); NTSYSAPI NTSTATUS WINAPI NtSetInformationKey(HANDLE,const int,PVOID,ULONG); @@ -4045,6 +4045,7 @@ NTSYSAPI NTSTATUS WINAPI NtTerminateJobObject(HANDLE,NTSTATUS); NTSYSAPI NTSTATUS WINAPI NtTerminateProcess(HANDLE,LONG); NTSYSAPI NTSTATUS WINAPI NtTerminateThread(HANDLE,LONG); NTSYSAPI NTSTATUS WINAPI NtTestAlert(VOID); +NTSYSAPI NTSTATUS WINAPI NtTraceControl(ULONG,void*,ULONG,void*,ULONG,ULONG*); NTSYSAPI NTSTATUS WINAPI NtUnloadDriver(const UNICODE_STRING *); NTSYSAPI NTSTATUS WINAPI NtUnloadKey(POBJECT_ATTRIBUTES); NTSYSAPI NTSTATUS WINAPI NtUnloadKeyEx(POBJECT_ATTRIBUTES,HANDLE);