mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 21:36:11 +00:00
[WIN32K]
- Code formatting for NtUserProcessConnect. [USER32] - Hack a call to GetConnected in ClientThreadSetup in an attempt to temporarily "fix" a bug that makes the bots fail. Now we really need to fix user32 init! svn path=/trunk/; revision=65714
This commit is contained in:
parent
5b624b75db
commit
c6fccde6d2
4 changed files with 101 additions and 70 deletions
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
BOOL
|
BOOL
|
||||||
(CALLBACK *BASE_PROCESS_CREATE_NOTIFY_ROUTINE)(
|
(NTAPI *BASE_PROCESS_CREATE_NOTIFY_ROUTINE)(
|
||||||
HANDLE NewProcessId,
|
HANDLE NewProcessId,
|
||||||
HANDLE ParentThreadId,
|
HANDLE ParentThreadId,
|
||||||
ULONG dwUnknown,
|
ULONG dwUnknown,
|
||||||
|
|
|
@ -2521,9 +2521,9 @@ BOOL
|
||||||
NTAPI
|
NTAPI
|
||||||
NtUserNotifyProcessCreate(
|
NtUserNotifyProcessCreate(
|
||||||
HANDLE NewProcessId,
|
HANDLE NewProcessId,
|
||||||
HANDLE SourceThreadId,
|
HANDLE ParentThreadId,
|
||||||
DWORD dwUnknown,
|
ULONG dwUnknown,
|
||||||
ULONG CreateFlags);
|
ULONG CreateFlags);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -724,34 +724,43 @@ NtUserProcessConnect(
|
||||||
PUSERCONNECT pUserConnect,
|
PUSERCONNECT pUserConnect,
|
||||||
DWORD Size)
|
DWORD Size)
|
||||||
{
|
{
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
TRACE("NtUserProcessConnect\n");
|
PPROCESSINFO W32Process;
|
||||||
if (pUserConnect && ( Size == sizeof(USERCONNECT) ))
|
|
||||||
{
|
TRACE("NtUserProcessConnect\n");
|
||||||
PPROCESSINFO W32Process;
|
|
||||||
UserEnterShared();
|
if ( pUserConnect == NULL ||
|
||||||
GetW32ThreadInfo();
|
Size != sizeof(*pUserConnect) )
|
||||||
W32Process = PsGetCurrentProcessWin32Process();
|
{
|
||||||
_SEH2_TRY
|
return STATUS_UNSUCCESSFUL;
|
||||||
{
|
}
|
||||||
|
|
||||||
|
UserEnterShared();
|
||||||
|
|
||||||
|
W32Process = PsGetCurrentProcessWin32Process();
|
||||||
|
_SEH2_TRY
|
||||||
|
{
|
||||||
|
// FIXME: Check that pUserConnect->ulVersion == USER_VERSION;
|
||||||
|
|
||||||
pUserConnect->siClient.psi = gpsi;
|
pUserConnect->siClient.psi = gpsi;
|
||||||
pUserConnect->siClient.aheList = gHandleTable;
|
pUserConnect->siClient.aheList = gHandleTable;
|
||||||
pUserConnect->siClient.ulSharedDelta = (ULONG_PTR)W32Process->HeapMappings.KernelMapping -
|
pUserConnect->siClient.ulSharedDelta =
|
||||||
(ULONG_PTR)W32Process->HeapMappings.UserMapping;
|
(ULONG_PTR)W32Process->HeapMappings.KernelMapping -
|
||||||
}
|
(ULONG_PTR)W32Process->HeapMappings.UserMapping;
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
}
|
||||||
{
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
Status = _SEH2_GetExceptionCode();
|
Status = _SEH2_GetExceptionCode();
|
||||||
}
|
}
|
||||||
_SEH2_END
|
_SEH2_END;
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
SetLastNtError(Status);
|
SetLastNtError(Status);
|
||||||
}
|
}
|
||||||
UserLeave();
|
|
||||||
return Status;
|
UserLeave();
|
||||||
}
|
return Status;
|
||||||
return STATUS_UNSUCCESSFUL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
|
|
@ -240,6 +240,8 @@ ClientThreadSetup(VOID)
|
||||||
// continue as normal.
|
// continue as normal.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
GetConnected();
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -247,44 +249,53 @@ ClientThreadSetup(VOID)
|
||||||
BOOL
|
BOOL
|
||||||
Init(VOID)
|
Init(VOID)
|
||||||
{
|
{
|
||||||
USERCONNECT UserCon;
|
NTSTATUS Status;
|
||||||
|
USERCONNECT UserCon;
|
||||||
|
|
||||||
/* Set PEB data */
|
TRACE("user32::Init()\n");
|
||||||
NtCurrentPeb()->KernelCallbackTable = apfnDispatch;
|
|
||||||
NtCurrentPeb()->PostProcessInitRoutine = NULL;
|
|
||||||
|
|
||||||
NtUserProcessConnect( NtCurrentProcess(),
|
/* Set PEB data */
|
||||||
&UserCon,
|
NtCurrentPeb()->KernelCallbackTable = apfnDispatch;
|
||||||
sizeof(USERCONNECT));
|
NtCurrentPeb()->PostProcessInitRoutine = NULL;
|
||||||
|
|
||||||
g_ppi = GetWin32ClientInfo()->ppi; // Snapshot PI, used as pointer only!
|
/* Minimal setup of the connect info structure */
|
||||||
g_ulSharedDelta = UserCon.siClient.ulSharedDelta;
|
UserCon.ulVersion = USER_VERSION;
|
||||||
gpsi = SharedPtrToUser(UserCon.siClient.psi);
|
|
||||||
gHandleTable = SharedPtrToUser(UserCon.siClient.aheList);
|
|
||||||
gHandleEntries = SharedPtrToUser(gHandleTable->handles);
|
|
||||||
|
|
||||||
RtlInitializeCriticalSection(&gcsUserApiHook);
|
/* Connect to win32k */
|
||||||
|
Status = NtUserProcessConnect(NtCurrentProcess(),
|
||||||
|
&UserCon,
|
||||||
|
sizeof(UserCon));
|
||||||
|
if (!NT_SUCCESS(Status)) return FALSE;
|
||||||
|
|
||||||
//ERR("1 SI 0x%x : HT 0x%x : D 0x%x\n", UserCon.siClient.psi, UserCon.siClient.aheList, g_ulSharedDelta);
|
/* Retrieve data */
|
||||||
|
g_ppi = GetWin32ClientInfo()->ppi; // Snapshot PI, used as pointer only!
|
||||||
|
g_ulSharedDelta = UserCon.siClient.ulSharedDelta;
|
||||||
|
gpsi = SharedPtrToUser(UserCon.siClient.psi);
|
||||||
|
gHandleTable = SharedPtrToUser(UserCon.siClient.aheList);
|
||||||
|
gHandleEntries = SharedPtrToUser(gHandleTable->handles);
|
||||||
|
|
||||||
/* Allocate an index for user32 thread local data. */
|
RtlInitializeCriticalSection(&gcsUserApiHook);
|
||||||
User32TlsIndex = TlsAlloc();
|
|
||||||
if (User32TlsIndex != TLS_OUT_OF_INDEXES)
|
//ERR("1 SI 0x%x : HT 0x%x : D 0x%x\n", UserCon.siClient.psi, UserCon.siClient.aheList, g_ulSharedDelta);
|
||||||
{
|
|
||||||
if (MessageInit())
|
/* Allocate an index for user32 thread local data */
|
||||||
{
|
User32TlsIndex = TlsAlloc();
|
||||||
if (MenuInit())
|
if (User32TlsIndex == TLS_OUT_OF_INDEXES)
|
||||||
{
|
return FALSE;
|
||||||
|
|
||||||
|
if (MessageInit())
|
||||||
|
{
|
||||||
|
if (MenuInit())
|
||||||
|
{
|
||||||
InitializeCriticalSection(&U32AccelCacheLock);
|
InitializeCriticalSection(&U32AccelCacheLock);
|
||||||
LoadAppInitDlls();
|
LoadAppInitDlls();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
MessageCleanup();
|
MessageCleanup();
|
||||||
}
|
}
|
||||||
TlsFree(User32TlsIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
TlsFree(User32TlsIndex);
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -324,6 +335,9 @@ DllMain(
|
||||||
/* Don't bother us for each thread */
|
/* Don't bother us for each thread */
|
||||||
DisableThreadLibraryCalls(hInstanceDll);
|
DisableThreadLibraryCalls(hInstanceDll);
|
||||||
|
|
||||||
|
/* Minimal setup of the connect info structure */
|
||||||
|
ConnectInfo.ulVersion = USER_VERSION;
|
||||||
|
|
||||||
/* Setup the Object Directory path */
|
/* Setup the Object Directory path */
|
||||||
if (!SessionId)
|
if (!SessionId)
|
||||||
{
|
{
|
||||||
|
@ -373,32 +387,40 @@ DllMain(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finally init GDI */
|
/* Finally, initialize GDI */
|
||||||
return GdiDllInitialize(hInstanceDll, dwReason, reserved);
|
return GdiDllInitialize(hInstanceDll, dwReason, reserved);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: This function seems to be unused...
|
// FIXME: This function IS A BIIG HACK!!
|
||||||
VOID
|
VOID
|
||||||
FASTCALL
|
FASTCALL
|
||||||
GetConnected(VOID)
|
GetConnected(VOID)
|
||||||
{
|
{
|
||||||
USERCONNECT UserCon;
|
NTSTATUS Status;
|
||||||
|
USERCONNECT UserCon;
|
||||||
|
|
||||||
if ((PTHREADINFO)NtCurrentTeb()->Win32ThreadInfo == NULL)
|
TRACE("user32::GetConnected()\n");
|
||||||
NtUserGetThreadState(THREADSTATE_GETTHREADINFO);
|
|
||||||
|
|
||||||
if (gpsi && g_ppi) return;
|
if ((PTHREADINFO)NtCurrentTeb()->Win32ThreadInfo == NULL)
|
||||||
|
NtUserGetThreadState(THREADSTATE_GETTHREADINFO);
|
||||||
|
|
||||||
NtUserProcessConnect( NtCurrentProcess(),
|
if (gpsi && g_ppi) return;
|
||||||
&UserCon,
|
|
||||||
sizeof(USERCONNECT));
|
|
||||||
|
|
||||||
g_ppi = GetWin32ClientInfo()->ppi;
|
/* Minimal setup of the connect info structure */
|
||||||
g_ulSharedDelta = UserCon.siClient.ulSharedDelta;
|
UserCon.ulVersion = USER_VERSION;
|
||||||
gpsi = SharedPtrToUser(UserCon.siClient.psi);
|
|
||||||
gHandleTable = SharedPtrToUser(UserCon.siClient.aheList);
|
|
||||||
gHandleEntries = SharedPtrToUser(gHandleTable->handles);
|
|
||||||
|
|
||||||
|
/* Connect to win32k */
|
||||||
|
Status = NtUserProcessConnect(NtCurrentProcess(),
|
||||||
|
&UserCon,
|
||||||
|
sizeof(UserCon));
|
||||||
|
if (!NT_SUCCESS(Status)) return;
|
||||||
|
|
||||||
|
/* Retrieve data */
|
||||||
|
g_ppi = GetWin32ClientInfo()->ppi; // Snapshot PI, used as pointer only!
|
||||||
|
g_ulSharedDelta = UserCon.siClient.ulSharedDelta;
|
||||||
|
gpsi = SharedPtrToUser(UserCon.siClient.psi);
|
||||||
|
gHandleTable = SharedPtrToUser(UserCon.siClient.aheList);
|
||||||
|
gHandleEntries = SharedPtrToUser(gHandleTable->handles);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue