ntoskrnl.exe: Implement PsGetProcessInheritedFromUniqueProcessId.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ed140a7ac5
commit
850fd237bd
|
@ -2589,6 +2589,15 @@ HANDLE WINAPI PsGetProcessId(PEPROCESS process)
|
||||||
return (HANDLE)process->info.UniqueProcessId;
|
return (HANDLE)process->info.UniqueProcessId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* PsGetProcessInheritedFromUniqueProcessId (NTOSKRNL.@)
|
||||||
|
*/
|
||||||
|
HANDLE WINAPI PsGetProcessInheritedFromUniqueProcessId( PEPROCESS process )
|
||||||
|
{
|
||||||
|
HANDLE id = (HANDLE)process->info.InheritedFromUniqueProcessId;
|
||||||
|
TRACE( "%p -> %p\n", process, id );
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
static void *create_thread_object( HANDLE handle )
|
static void *create_thread_object( HANDLE handle )
|
||||||
{
|
{
|
||||||
|
|
|
@ -888,7 +888,7 @@
|
||||||
@ stub PsGetProcessExitTime
|
@ stub PsGetProcessExitTime
|
||||||
@ stdcall PsGetProcessId(ptr)
|
@ stdcall PsGetProcessId(ptr)
|
||||||
@ stub PsGetProcessImageFileName
|
@ stub PsGetProcessImageFileName
|
||||||
@ stub PsGetProcessInheritedFromUniqueProcessId
|
@ stdcall PsGetProcessInheritedFromUniqueProcessId(ptr)
|
||||||
@ stub PsGetProcessJob
|
@ stub PsGetProcessJob
|
||||||
@ stub PsGetProcessPeb
|
@ stub PsGetProcessPeb
|
||||||
@ stub PsGetProcessPriorityClass
|
@ stub PsGetProcessPriorityClass
|
||||||
|
@ -1374,7 +1374,7 @@
|
||||||
@ stdcall -private ZwQueryFullAttributesFile(ptr ptr) NtQueryFullAttributesFile
|
@ stdcall -private ZwQueryFullAttributesFile(ptr ptr) NtQueryFullAttributesFile
|
||||||
@ stdcall -private ZwQueryInformationFile(long ptr ptr long long) NtQueryInformationFile
|
@ stdcall -private ZwQueryInformationFile(long ptr ptr long long) NtQueryInformationFile
|
||||||
@ stdcall -private ZwQueryInformationJobObject(long long ptr long ptr) NtQueryInformationJobObject
|
@ stdcall -private ZwQueryInformationJobObject(long long ptr long ptr) NtQueryInformationJobObject
|
||||||
@ stdcall -private ZwQueryInformationProcess(long long ptr long ptr) NtQueryInformationProcess
|
@ stdcall ZwQueryInformationProcess(long long ptr long ptr) NtQueryInformationProcess
|
||||||
@ stdcall -private ZwQueryInformationThread(long long ptr long ptr) NtQueryInformationThread
|
@ stdcall -private ZwQueryInformationThread(long long ptr long ptr) NtQueryInformationThread
|
||||||
@ stdcall -private ZwQueryInformationToken(long long ptr long ptr) NtQueryInformationToken
|
@ stdcall -private ZwQueryInformationToken(long long ptr long ptr) NtQueryInformationToken
|
||||||
@ stdcall -private ZwQueryInstallUILanguage(ptr) NtQueryInstallUILanguage
|
@ stdcall -private ZwQueryInstallUILanguage(ptr) NtQueryInstallUILanguage
|
||||||
|
|
|
@ -55,6 +55,8 @@ static PEPROCESS *pPsInitialSystemProcess;
|
||||||
|
|
||||||
void WINAPI ObfReferenceObject( void *obj );
|
void WINAPI ObfReferenceObject( void *obj );
|
||||||
|
|
||||||
|
NTSTATUS WINAPI ZwQueryInformationProcess(HANDLE,PROCESSINFOCLASS,void*,ULONG,ULONG*);
|
||||||
|
|
||||||
extern int CDECL _vsnprintf(char *str, size_t len, const char *format, __ms_va_list argptr);
|
extern int CDECL _vsnprintf(char *str, size_t len, const char *format, __ms_va_list argptr);
|
||||||
|
|
||||||
static void kvprintf(const char *format, __ms_va_list ap)
|
static void kvprintf(const char *format, __ms_va_list ap)
|
||||||
|
@ -323,7 +325,9 @@ static NTSTATUS wait_single_handle(HANDLE handle, ULONGLONG timeout)
|
||||||
|
|
||||||
static void test_current_thread(BOOL is_system)
|
static void test_current_thread(BOOL is_system)
|
||||||
{
|
{
|
||||||
|
PROCESS_BASIC_INFORMATION info;
|
||||||
DISPATCHER_HEADER *header;
|
DISPATCHER_HEADER *header;
|
||||||
|
HANDLE process_handle, id;
|
||||||
PEPROCESS current;
|
PEPROCESS current;
|
||||||
PETHREAD thread;
|
PETHREAD thread;
|
||||||
NTSTATUS ret;
|
NTSTATUS ret;
|
||||||
|
@ -349,6 +353,18 @@ static void test_current_thread(BOOL is_system)
|
||||||
|
|
||||||
ok(PsGetThreadId((PETHREAD)KeGetCurrentThread()) == PsGetCurrentThreadId(), "thread IDs don't match\n");
|
ok(PsGetThreadId((PETHREAD)KeGetCurrentThread()) == PsGetCurrentThreadId(), "thread IDs don't match\n");
|
||||||
ok(PsIsSystemThread((PETHREAD)KeGetCurrentThread()) == is_system, "unexpected system thread\n");
|
ok(PsIsSystemThread((PETHREAD)KeGetCurrentThread()) == is_system, "unexpected system thread\n");
|
||||||
|
|
||||||
|
ret = ObOpenObjectByPointer(current, OBJ_KERNEL_HANDLE, NULL, PROCESS_QUERY_INFORMATION, NULL, KernelMode, &process_handle);
|
||||||
|
ok(!ret, "ObOpenObjectByPointer failed: %#x\n", ret);
|
||||||
|
|
||||||
|
ret = ZwQueryInformationProcess(process_handle, ProcessBasicInformation, &info, sizeof(info), NULL);
|
||||||
|
ok(!ret, "ZwQueryInformationProcess failed: %#x\n", ret);
|
||||||
|
|
||||||
|
id = PsGetProcessInheritedFromUniqueProcessId(current);
|
||||||
|
ok(id == (HANDLE)info.InheritedFromUniqueProcessId, "unexpected process id %p\n", id);
|
||||||
|
|
||||||
|
ret = ZwClose(process_handle);
|
||||||
|
ok(!ret, "ZwClose failed: %#x\n", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sleep(void)
|
static void sleep(void)
|
||||||
|
|
|
@ -1663,6 +1663,7 @@ NTSTATUS WINAPI PsCreateSystemThread(PHANDLE,ULONG,POBJECT_ATTRIBUTES,HANDLE,PC
|
||||||
#define PsGetCurrentThread() ((PETHREAD)KeGetCurrentThread())
|
#define PsGetCurrentThread() ((PETHREAD)KeGetCurrentThread())
|
||||||
HANDLE WINAPI PsGetCurrentProcessId(void);
|
HANDLE WINAPI PsGetCurrentProcessId(void);
|
||||||
HANDLE WINAPI PsGetCurrentThreadId(void);
|
HANDLE WINAPI PsGetCurrentThreadId(void);
|
||||||
|
HANDLE WINAPI PsGetProcessInheritedFromUniqueProcessId(PEPROCESS);
|
||||||
BOOLEAN WINAPI PsGetVersion(ULONG*,ULONG*,ULONG*,UNICODE_STRING*);
|
BOOLEAN WINAPI PsGetVersion(ULONG*,ULONG*,ULONG*,UNICODE_STRING*);
|
||||||
NTSTATUS WINAPI PsTerminateSystemThread(NTSTATUS);
|
NTSTATUS WINAPI PsTerminateSystemThread(NTSTATUS);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue