[PATCH] ntdll: Add stub for ProcessInstrumentationCallback info class in NtSetInformationProcess().
Paul Gofman
pgofman at codeweavers.com
Mon Jul 19 07:16:29 CDT 2021
Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
---
dlls/ntdll/tests/info.c | 27 +++++++++++++++++++++++++++
dlls/ntdll/unix/process.c | 11 +++++++++++
include/winternl.h | 7 +++++++
3 files changed, 45 insertions(+)
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
index c873a224a7c..40e01917d9a 100644
--- a/dlls/ntdll/tests/info.c
+++ b/dlls/ntdll/tests/info.c
@@ -3232,6 +3232,32 @@ static void test_debug_object(void)
ok( event.u.LoadDll.fUnicode == TRUE, "event not updated %x\n", event.u.LoadDll.fUnicode );
}
+static void test_process_instrumentation_callback(void)
+{
+ PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION info;
+ NTSTATUS status;
+
+ status = NtSetInformationProcess( GetCurrentProcess(), ProcessInstrumentationCallback, NULL, 0 );
+ ok( status == STATUS_INFO_LENGTH_MISMATCH /* Win10 */ || status == STATUS_INVALID_INFO_CLASS
+ || status == STATUS_NOT_SUPPORTED, "Got unexpected status %#x.\n", status );
+ if (status != STATUS_INFO_LENGTH_MISMATCH)
+ {
+ win_skip( "ProcessInstrumentationCallback is not supported.\n" );
+ return;
+ }
+
+ memset(&info, 0, sizeof(info));
+ status = NtSetInformationProcess( GetCurrentProcess(), ProcessInstrumentationCallback, &info, sizeof(info) );
+ ok( status == STATUS_SUCCESS /* Win 10 */ || broken( status == STATUS_PRIVILEGE_NOT_HELD )
+ || broken( status == STATUS_INFO_LENGTH_MISMATCH ), "Got unexpected status %#x.\n", status );
+
+ memset(&info, 0, sizeof(info));
+ status = NtSetInformationProcess( GetCurrentProcess(), ProcessInstrumentationCallback, &info, 2 * sizeof(info) );
+ ok( status == STATUS_SUCCESS || status == STATUS_INFO_LENGTH_MISMATCH
+ || broken( status == STATUS_PRIVILEGE_NOT_HELD ) /* some versions and machines before Win10 */,
+ "Got unexpected status %#x.\n", status );
+}
+
START_TEST(info)
{
char **argv;
@@ -3298,4 +3324,5 @@ START_TEST(info)
test_NtGetCurrentProcessorNumber();
test_ThreadEnableAlignmentFaultFixup();
+ test_process_instrumentation_callback();
}
diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c
index 77fb81fe404..141720565dc 100644
--- a/dlls/ntdll/unix/process.c
+++ b/dlls/ntdll/unix/process.c
@@ -1507,6 +1507,17 @@ NTSTATUS WINAPI NtSetInformationProcess( HANDLE handle, PROCESSINFOCLASS class,
break;
}
+ case ProcessInstrumentationCallback:
+ {
+ PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION *instr = info;
+
+ FIXME( "ProcessInstrumentationCallback stub.\n" );
+
+ if (size < sizeof(*instr)) return STATUS_INFO_LENGTH_MISMATCH;
+ ret = STATUS_SUCCESS;
+ break;
+ }
+
case ProcessWineMakeProcessSystem:
if (size != sizeof(HANDLE *)) return STATUS_INFO_LENGTH_MISMATCH;
SERVER_START_REQ( make_process_system )
diff --git a/include/winternl.h b/include/winternl.h
index f832729f985..a97cfdf0231 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -1472,6 +1472,13 @@ typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {
#define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
#define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
+typedef struct _PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION
+{
+ ULONG Version;
+ ULONG Reserved;
+ VOID *Callback;
+} PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION, *PPROCESS_INSTRUMENTATION_CALLBACK_INFORMATION;
+
typedef enum _FSINFOCLASS {
FileFsVolumeInformation = 1,
FileFsLabelInformation,
--
2.31.1
More information about the wine-devel
mailing list