mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 23:22:57 +00:00
Fix one of the added hacks. ObpCreateHAndle not exported anymore, and win32k now duplicates the handle nicely (Also faster since we don't have to attach/detach to csr anymore
svn path=/trunk/; revision=15416
This commit is contained in:
parent
026d788dcc
commit
04f9bb0465
4 changed files with 41 additions and 39 deletions
|
@ -823,7 +823,6 @@ ObAssignSecurity@16
|
||||||
;ObCheckCreateObjectAccess@28
|
;ObCheckCreateObjectAccess@28
|
||||||
;ObCheckObjectAccess@20
|
;ObCheckObjectAccess@20
|
||||||
ObCreateObject@36
|
ObCreateObject@36
|
||||||
ObpCreateHandle ; FIXME! See win32k/ntuser/csr.c!
|
|
||||||
ObFindHandleForObject@20
|
ObFindHandleForObject@20
|
||||||
ObGetObjectPointerCount@4
|
ObGetObjectPointerCount@4
|
||||||
ObGetObjectSecurity@12
|
ObGetObjectSecurity@12
|
||||||
|
|
|
@ -15,7 +15,11 @@ extern PEPROCESS CsrProcess;
|
||||||
extern NTSTATUS FASTCALL CsrInit(void);
|
extern NTSTATUS FASTCALL CsrInit(void);
|
||||||
extern NTSTATUS FASTCALL CsrNotify(PCSRSS_API_REQUEST Request, PCSRSS_API_REPLY Reply);
|
extern NTSTATUS FASTCALL CsrNotify(PCSRSS_API_REQUEST Request, PCSRSS_API_REPLY Reply);
|
||||||
extern NTSTATUS FASTCALL CsrCloseHandle(HANDLE Handle);
|
extern NTSTATUS FASTCALL CsrCloseHandle(HANDLE Handle);
|
||||||
extern NTSTATUS STDCALL CsrInsertObject(PVOID, PACCESS_STATE, ACCESS_MASK, ULONG, PVOID*, PHANDLE);
|
NTSTATUS
|
||||||
|
STDCALL
|
||||||
|
CsrInsertObject(HANDLE ObjectHandle,
|
||||||
|
ACCESS_MASK DesiredAccess,
|
||||||
|
PHANDLE Handle);
|
||||||
|
|
||||||
#endif /* CSR_H_INCLUDED */
|
#endif /* CSR_H_INCLUDED */
|
||||||
|
|
||||||
|
|
|
@ -11,13 +11,6 @@
|
||||||
|
|
||||||
static HANDLE WindowsApiPort = NULL;
|
static HANDLE WindowsApiPort = NULL;
|
||||||
PEPROCESS CsrProcess = NULL;
|
PEPROCESS CsrProcess = NULL;
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
ObpCreateHandle(PEPROCESS Process,
|
|
||||||
PVOID ObjectBody,
|
|
||||||
ACCESS_MASK GrantedAccess,
|
|
||||||
BOOLEAN Inherit,
|
|
||||||
PHANDLE HandleReturn);
|
|
||||||
|
|
||||||
NTSTATUS FASTCALL
|
NTSTATUS FASTCALL
|
||||||
CsrInit(void)
|
CsrInit(void)
|
||||||
|
@ -83,36 +76,45 @@ CsrNotify(PCSRSS_API_REQUEST Request, PCSRSS_API_REPLY Reply)
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
NTSTATUS
|
||||||
CsrInsertObject(PVOID Object,
|
STDCALL
|
||||||
PACCESS_STATE PassedAccessState,
|
CsrInsertObject(HANDLE ObjectHandle,
|
||||||
ACCESS_MASK DesiredAccess,
|
ACCESS_MASK DesiredAccess,
|
||||||
ULONG AdditionalReferences,
|
|
||||||
PVOID* ReferencedObject,
|
|
||||||
PHANDLE Handle)
|
PHANDLE Handle)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PEPROCESS OldProcess;
|
HANDLE CsrProcessHandle;
|
||||||
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
/* Switch to the process in which the handle is valid */
|
CLIENT_ID Cid;
|
||||||
OldProcess = PsGetCurrentProcess();
|
|
||||||
if (CsrProcess != OldProcess)
|
/* Put CSR'S CID */
|
||||||
{
|
Cid.UniqueProcess = CsrProcess->UniqueProcessId;
|
||||||
KeAttachProcess(CsrProcess);
|
Cid.UniqueThread = 0;
|
||||||
}
|
|
||||||
|
/* Empty Attributes */
|
||||||
/* FIXME!!!!!!!!! SOMETHING HAS GOT TO BE DONE ABOUT THIS !!!!! */
|
InitializeObjectAttributes(&ObjectAttributes,
|
||||||
Status = ObpCreateHandle(PsGetCurrentProcess(),
|
NULL,
|
||||||
Object,
|
0,
|
||||||
DesiredAccess,
|
NULL,
|
||||||
BODY_TO_HEADER(Object)->Inherit,
|
NULL);
|
||||||
Handle);
|
|
||||||
/* FIXME!!!!!!!!! SOMETHING HAS GOT TO BE DONE ABOUT ^^^^ THAT !!!!! */
|
/* Get a Handle to Csrss */
|
||||||
|
Status = ZwOpenProcess(&CsrProcessHandle,
|
||||||
if (CsrProcess != OldProcess)
|
PROCESS_DUP_HANDLE,
|
||||||
{
|
&ObjectAttributes,
|
||||||
KeDetachProcess();
|
&Cid);
|
||||||
}
|
|
||||||
|
/* Duplicate the Handle */
|
||||||
|
Status = ZwDuplicateObject(NtCurrentProcess(),
|
||||||
|
ObjectHandle,
|
||||||
|
CsrProcessHandle,
|
||||||
|
Handle,
|
||||||
|
DesiredAccess,
|
||||||
|
TRUE,
|
||||||
|
0);
|
||||||
|
|
||||||
|
/* Close our handle to CSRSS */
|
||||||
|
NtClose(CsrProcessHandle);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -843,11 +843,8 @@ NtUserCreateDesktop(
|
||||||
* Create a handle for CSRSS and notify CSRSS
|
* Create a handle for CSRSS and notify CSRSS
|
||||||
*/
|
*/
|
||||||
Request.Type = CSRSS_CREATE_DESKTOP;
|
Request.Type = CSRSS_CREATE_DESKTOP;
|
||||||
Status = CsrInsertObject((PVOID)DesktopObject,
|
Status = CsrInsertObject(Desktop,
|
||||||
NULL,
|
|
||||||
GENERIC_ALL,
|
GENERIC_ALL,
|
||||||
0,
|
|
||||||
NULL,
|
|
||||||
(HANDLE*)&Request.Data.CreateDesktopRequest.DesktopHandle);
|
(HANDLE*)&Request.Data.CreateDesktopRequest.DesktopHandle);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue