[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