diff --git a/dll/win32/rpcrt4/rpcrt4.spec b/dll/win32/rpcrt4/rpcrt4.spec index 7b946ca37ff..f103cc5868d 100644 --- a/dll/win32/rpcrt4/rpcrt4.spec +++ b/dll/win32/rpcrt4/rpcrt4.spec @@ -525,3 +525,4 @@ @ stub tree_into_ndr @ stub tree_peek_ndr @ stub tree_size_ndr +@ stdcall RpcServerRegisterIf3(ptr ptr ptr long long long ptr ptr) diff --git a/drivers/filesystems/npfs/fsctrl.c b/drivers/filesystems/npfs/fsctrl.c index 7f4f1d75cfb..24421c2e0b4 100644 --- a/drivers/filesystems/npfs/fsctrl.c +++ b/drivers/filesystems/npfs/fsctrl.c @@ -842,6 +842,12 @@ NpCommonFileSystemControl(IN PDEVICE_OBJECT DeviceObject, Status = NpSetClientProcess(DeviceObject, Irp); break; + case FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE: + + NpAcquireExclusiveVcb(); + Status = NpGetConnectionAttribute(DeviceObject, Irp); + break; + default: return STATUS_NOT_SUPPORTED; } @@ -875,4 +881,52 @@ NpFsdFileSystemControl(IN PDEVICE_OBJECT DeviceObject, return Status; } + +NTSTATUS +NTAPI +NpGetConnectionAttribute(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + PIO_STACK_LOCATION IoStackLocation; + NODE_TYPE_CODE NodeTypeCode; + PNP_CCB Ccb; + ULONG Length; + ULONG* pid; + PAGED_CODE(); + + /* Get the current stack location */ + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + /* Decode the file object and check the node type */ + NodeTypeCode = NpDecodeFileObject(IoStackLocation->FileObject, 0, &Ccb, 0); + if (NodeTypeCode != NPFS_NTC_CCB) + { + return STATUS_PIPE_DISCONNECTED; + } + + /* Get the length of the query buffer */ + Length = IoStackLocation->Parameters.QueryFile.Length; + if (Length < sizeof(ULONG)) + { + return STATUS_INVALID_PARAMETER; + } + + /* Lock the Ccb */ + ExAcquireResourceExclusiveLite(&Ccb->NonPagedCcb->Lock, TRUE); + + Irp->IoStatus.Information = sizeof(ULONG); + pid = (ULONG*)(Irp->AssociatedIrp.SystemBuffer); + if (Ccb->ClientSession != NULL){ + PNP_CLIENT_PROCESS ClientSession = Ccb->ClientSession; + *pid = (ULONG)PsGetProcessId(ClientSession->Process); + } + else + *pid = (ULONG)PsGetProcessId(Ccb->Process); + + /* Unlock the Ccb */ + ExReleaseResourceLite(&Ccb->NonPagedCcb->Lock); + + return STATUS_SUCCESS; +} + /* EOF */ diff --git a/drivers/filesystems/npfs/npfs.h b/drivers/filesystems/npfs/npfs.h index 5d36d0cf3bf..b7d15b4419b 100644 --- a/drivers/filesystems/npfs/npfs.h +++ b/drivers/filesystems/npfs/npfs.h @@ -692,4 +692,9 @@ NTAPI NpFsdQueryVolumeInformation(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); +NTSTATUS +NTAPI +NpGetConnectionAttribute(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp); + #endif /* _NPFS_PCH_ */ diff --git a/sdk/include/ndk/iotypes.h b/sdk/include/ndk/iotypes.h index 5610099f884..3b854ecddd9 100644 --- a/sdk/include/ndk/iotypes.h +++ b/sdk/include/ndk/iotypes.h @@ -1205,6 +1205,8 @@ typedef VOID CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE \ + CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_PIPE_INTERNAL_READ \ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA) #define FSCTL_PIPE_INTERNAL_WRITE \ diff --git a/win32ss/user/ntuser/focus.c b/win32ss/user/ntuser/focus.c index 8f38ac37592..47fe55db6d6 100644 --- a/win32ss/user/ntuser/focus.c +++ b/win32ss/user/ntuser/focus.c @@ -1123,7 +1123,7 @@ co_IntSetActiveWindow( // Set state flag to prevent recursions. Wnd->state |= WNDS_BEINGACTIVATED; - IntNotifyWinEvent(EVENT_SYSTEM_FOREGROUND, Wnd, OBJID_WINDOW, CHILDID_SELF, WEF_SETBYWNDPTI); + //IntNotifyWinEvent(EVENT_SYSTEM_FOREGROUND, Wnd, OBJID_WINDOW, CHILDID_SELF, WEF_SETBYWNDPTI); // Clear out activate EVENT messages. FindRemoveEventMsg(pti, POSTEVENT_SAW, POSTEVENT_DAW); diff --git a/win32ss/user/user32/windows/hook.c b/win32ss/user/user32/windows/hook.c index a9e9647eddf..9c9ca097f10 100644 --- a/win32ss/user/user32/windows/hook.c +++ b/win32ss/user/user32/windows/hook.c @@ -834,15 +834,16 @@ User32CallEventProcFromKernel(PVOID Arguments, ULONG ArgumentLength) } } - Proc(Common->hook, - Common->event, - Common->hwnd, - Common->idObject, - Common->idChild, - Common->dwEventThread, - Common->dwmsEventTime); - - if (Loaded) FreeLibrary(mod); + if (Loaded){ + Proc(Common->hook, + Common->event, + Common->hwnd, + Common->idObject, + Common->idChild, + Common->dwEventThread, + Common->dwmsEventTime); + FreeLibrary(mod); + } return ZwCallbackReturn(NULL, 0, STATUS_SUCCESS); }