[ros-diffs] [reactos] 01/01: [CDFS] Addendum to 03a9d8c: check for volume state (locked?) before opening a file CORE-13957
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a2ed758a205cedcafbc836e4ca5ac6b87d60c2e6 commit a2ed758a205cedcafbc836e4ca5ac6b87d60c2e6 Author: Pierre SchweitzerAuthorDate: Sat Nov 4 21:31:35 2017 +0100 [CDFS] Addendum to 03a9d8c: check for volume state (locked?) before opening a file CORE-13957 --- drivers/filesystems/cdfs/create.c | 5 + 1 file changed, 5 insertions(+) diff --git a/drivers/filesystems/cdfs/create.c b/drivers/filesystems/cdfs/create.c index 09a054bf1b..dde7a2404d 100644 --- a/drivers/filesystems/cdfs/create.c +++ b/drivers/filesystems/cdfs/create.c @@ -222,6 +222,11 @@ CdfsCreateFile(PDEVICE_OBJECT DeviceObject, return STATUS_ACCESS_DENIED; } +if (BooleanFlagOn(DeviceExt->Flags, VCB_VOLUME_LOCKED)) +{ +return STATUS_ACCESS_DENIED; +} + Status = CdfsOpenFile(DeviceExt, FileObject, >FileName);
[ros-diffs] [reactos] 01/01: [CDFS] Implement volume un/locking. CORE-13957
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=03a9d8c7ca880006b4aa37098e885206ddc106cc commit 03a9d8c7ca880006b4aa37098e885206ddc106cc Author: Pierre SchweitzerAuthorDate: Sat Nov 4 21:29:51 2017 +0100 [CDFS] Implement volume un/locking. CORE-13957 --- drivers/filesystems/cdfs/cdfs.h | 4 +++ drivers/filesystems/cdfs/fsctl.c | 69 2 files changed, 73 insertions(+) diff --git a/drivers/filesystems/cdfs/cdfs.h b/drivers/filesystems/cdfs/cdfs.h index f5a8185834..b23846f647 100644 --- a/drivers/filesystems/cdfs/cdfs.h +++ b/drivers/filesystems/cdfs/cdfs.h @@ -153,6 +153,8 @@ typedef struct _CDINFO } CDINFO, *PCDINFO; +#define VCB_VOLUME_LOCKED 0x0001 + typedef struct { ERESOURCE VcbResource; @@ -165,6 +167,8 @@ typedef struct PDEVICE_OBJECT StorageDevice; PFILE_OBJECT StreamFileObject; + ULONG Flags; + CDINFO CdInfo; /* Notifications */ diff --git a/drivers/filesystems/cdfs/fsctl.c b/drivers/filesystems/cdfs/fsctl.c index 44ad59cf22..925819fb8e 100644 --- a/drivers/filesystems/cdfs/fsctl.c +++ b/drivers/filesystems/cdfs/fsctl.c @@ -23,6 +23,7 @@ * PURPOSE: CDROM (ISO 9660) filesystem driver * PROGRAMMER: Art Yerkes * Eric Kohl +* Pierre Schweitzer */ /* INCLUDES */ @@ -549,6 +550,64 @@ CdfsVerifyVolume( } +static +NTSTATUS +CdfsLockOrUnlockVolume( +IN PCDFS_IRP_CONTEXT IrpContext, +IN BOOLEAN LockVolume) +{ +PFCB Fcb; +PVPB Vpb; +PFILE_OBJECT FileObject; +PDEVICE_EXTENSION DeviceExt; + +FileObject = IrpContext->FileObject; +Fcb = FileObject->FsContext; +DeviceExt = IrpContext->DeviceObject->DeviceExtension; +Vpb = DeviceExt->StreamFileObject->Vpb; + +/* Only allow locking with the volume open */ +if (!BooleanFlagOn(Fcb->Flags, FCB_IS_VOLUME_STREAM)) +{ +return STATUS_ACCESS_DENIED; +} + +/* Bail out if it's already in the demanded state */ +if ((BooleanFlagOn(DeviceExt->Flags, VCB_VOLUME_LOCKED) && LockVolume) || +(!BooleanFlagOn(DeviceExt->Flags, VCB_VOLUME_LOCKED) && !LockVolume)) +{ +return STATUS_ACCESS_DENIED; +} + +/* Bail out if it's already in the demanded state */ +if ((BooleanFlagOn(Vpb->Flags, VPB_LOCKED) && LockVolume) || +(!BooleanFlagOn(Vpb->Flags, VPB_LOCKED) && !LockVolume)) +{ +return STATUS_ACCESS_DENIED; +} + +/* Deny locking if we're not alone */ +if (LockVolume && DeviceExt->OpenHandleCount != 1) +{ +return STATUS_ACCESS_DENIED; +} + +/* Finally, proceed */ +if (LockVolume) +{ +DeviceExt->Flags |= VCB_VOLUME_LOCKED; +Vpb->Flags |= VPB_LOCKED; +} +else +{ +DeviceExt->Flags &= ~VCB_VOLUME_LOCKED; +Vpb->Flags &= ~VPB_LOCKED; +} + +return STATUS_SUCCESS; +} + + NTSTATUS NTAPI CdfsSetCompression( @@ -604,6 +663,16 @@ CdfsFileSystemControl( Status = CdfsSetCompression(DeviceObject, Irp); break; +case FSCTL_LOCK_VOLUME: +DPRINT("CDFS: IRP_MN_USER_FS_REQUEST / FSCTL_LOCK_VOLUME\n"); +Status = CdfsLockOrUnlockVolume(IrpContext, TRUE); +break; + +case FSCTL_UNLOCK_VOLUME: +DPRINT("CDFS: IRP_MN_USER_FS_REQUEST / FSCTL_UNLOCK_VOLUME\n"); +Status = CdfsLockOrUnlockVolume(IrpContext, FALSE); +break; + default: DPRINT1("CDFS: IRP_MN_USER_FS_REQUEST / Unknown IoControlCode 0x%x\n", Stack->Parameters.DeviceIoControl.IoControlCode);
[ros-diffs] [reactos] 01/01: [CDFS] Don't use uninit var. Fixes MSVC build (good boy :-))
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b30670ba43ec5b8901ddbc98aff11f0f8be5d70d commit b30670ba43ec5b8901ddbc98aff11f0f8be5d70d Author: Pierre SchweitzerAuthorDate: Sat Nov 4 21:23:11 2017 +0100 [CDFS] Don't use uninit var. Fixes MSVC build (good boy :-)) --- drivers/filesystems/cdfs/create.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/filesystems/cdfs/create.c b/drivers/filesystems/cdfs/create.c index de53b1e74a..09a054bf1b 100644 --- a/drivers/filesystems/cdfs/create.c +++ b/drivers/filesystems/cdfs/create.c @@ -268,6 +268,7 @@ CdfsCreate( ASSERT(IrpContext); DeviceObject = IrpContext->DeviceObject; +DeviceExt = DeviceObject->DeviceExtension; if (DeviceObject == CdfsGlobalData->CdFsDeviceObject || DeviceObject == CdfsGlobalData->HddFsDeviceObject) { /* DeviceObject represents FileSystem instead of logical volume */ @@ -277,8 +278,6 @@ CdfsCreate( return STATUS_SUCCESS; } -DeviceExt = DeviceObject->DeviceExtension; - KeEnterCriticalRegion(); ExAcquireResourceExclusiveLite(>DirResource, TRUE);
[ros-diffs] [reactos] 01/01: [SETUPAPI] CM_Open_DevNode_Key_Ex: Add support for remote registry access and the Disposition parameter.
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=06f9e1220f87a5ec1a66230609c01533129846c1 commit 06f9e1220f87a5ec1a66230609c01533129846c1 Author: Eric KohlAuthorDate: Sat Nov 4 20:00:54 2017 +0100 [SETUPAPI] CM_Open_DevNode_Key_Ex: Add support for remote registry access and the Disposition parameter. --- dll/win32/setupapi/cfgmgr.c | 58 +++-- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index b45e6dec7a..362d34e14e 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -5002,9 +5002,10 @@ CM_Open_Class_Key_ExW( } else { - if (RegConnectRegistryW(((PMACHINE_INFO)hMachine)->szMachineName, - HKEY_LOCAL_MACHINE, )) - return CR_REGISTRY_ERROR; +if (RegConnectRegistryW(((PMACHINE_INFO)hMachine)->szMachineName, +HKEY_LOCAL_MACHINE, +)) +return CR_REGISTRY_ERROR; } if (ulFlags & CM_OPEN_CLASS_KEY_INTERFACE) @@ -5097,6 +5098,8 @@ CM_Open_DevNode_Key_Ex( HSTRING_TABLE StringTable = NULL; LPWSTR pszDevInst, pszKeyPath = NULL, pszInstancePath = NULL; LONG lError; +DWORD dwDisposition; +HKEY hRootKey = NULL; CONFIGRET ret = CR_CALL_NOT_IMPLEMENTED; FIXME("CM_Open_DevNode_Key_Ex(%lx %lx %lu %lx %p %lx %lx)\n", @@ -5138,14 +5141,14 @@ CM_Open_DevNode_Key_Ex( TRACE("pszDevInst: %S\n", pszDevInst); -pszKeyPath = MyMalloc(1024); +pszKeyPath = MyMalloc(512 * sizeof(WCHAR)); if (pszKeyPath == NULL) { ret = CR_OUT_OF_MEMORY; goto done; } -pszInstancePath = MyMalloc(1024); +pszInstancePath = MyMalloc(512 * sizeof(WCHAR)); if (pszInstancePath == NULL) { ret = CR_OUT_OF_MEMORY; @@ -5169,14 +5172,42 @@ CM_Open_DevNode_Key_Ex( TRACE("pszKeyPath: %S\n", pszKeyPath); -// FIXME: Disposition -// FIXME: hMachine +if (hMachine == NULL) +{ +hRootKey = HKEY_LOCAL_MACHINE; +} +else +{ +if (RegConnectRegistryW(((PMACHINE_INFO)hMachine)->szMachineName, +HKEY_LOCAL_MACHINE, +)) +{ +ret = CR_REGISTRY_ERROR; +goto done; +} +} + +if (Disposition == RegDisposition_OpenAlways) +{ +lError = RegCreateKeyExW(hRootKey, + pszKeyPath, + 0, + NULL, + 0, + samDesired, + NULL, + phkDevice, + ); +} +else +{ +lError = RegOpenKeyExW(hRootKey, + pszKeyPath, + 0, + samDesired, + phkDevice); +} -lError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, - pszKeyPath, - 0, - samDesired, - phkDevice); if (lError != ERROR_SUCCESS) { *phkDevice = NULL; @@ -5184,6 +5215,9 @@ CM_Open_DevNode_Key_Ex( } done: +if ((hRootKey != NULL) && (hRootKey != HKEY_LOCAL_MACHINE)) +RegCloseKey(hRootKey); + if (pszInstancePath != NULL) MyFree(pszInstancePath);
[ros-diffs] [reactos] 01/01: [CDFS] Implement open handle count
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=95447d2fd11604eeea4870ed7a6e9b3610eb1173 commit 95447d2fd11604eeea4870ed7a6e9b3610eb1173 Author: Pierre SchweitzerAuthorDate: Sat Nov 4 21:14:50 2017 +0100 [CDFS] Implement open handle count --- drivers/filesystems/cdfs/cdfs.h| 3 +++ drivers/filesystems/cdfs/cleanup.c | 2 ++ drivers/filesystems/cdfs/create.c | 3 +++ 3 files changed, 8 insertions(+) diff --git a/drivers/filesystems/cdfs/cdfs.h b/drivers/filesystems/cdfs/cdfs.h index dff86cec2e..f5a8185834 100644 --- a/drivers/filesystems/cdfs/cdfs.h +++ b/drivers/filesystems/cdfs/cdfs.h @@ -170,6 +170,9 @@ typedef struct /* Notifications */ LIST_ENTRY NotifyList; PNOTIFY_SYNC NotifySync; + + /* Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLEANUP */ + ULONG OpenHandleCount; } DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB; diff --git a/drivers/filesystems/cdfs/cleanup.c b/drivers/filesystems/cdfs/cleanup.c index 5ee39b1616..10d7704636 100644 --- a/drivers/filesystems/cdfs/cleanup.c +++ b/drivers/filesystems/cdfs/cleanup.c @@ -55,6 +55,8 @@ CdfsCleanupFile(PCDFS_IRP_CONTEXT IrpContext, return STATUS_SUCCESS; } +DeviceExt->OpenHandleCount--; + /* Notify about the cleanup */ FsRtlNotifyCleanup(DeviceExt->NotifySync, &(DeviceExt->NotifyList), diff --git a/drivers/filesystems/cdfs/create.c b/drivers/filesystems/cdfs/create.c index 6271893b67..de53b1e74a 100644 --- a/drivers/filesystems/cdfs/create.c +++ b/drivers/filesystems/cdfs/create.c @@ -241,6 +241,8 @@ CdfsCreateFile(PDEVICE_OBJECT DeviceObject, CdfsCloseFile (DeviceExt, FileObject); return STATUS_NOT_A_DIRECTORY; } + +DeviceExt->OpenHandleCount++; } /* @@ -271,6 +273,7 @@ CdfsCreate( /* DeviceObject represents FileSystem instead of logical volume */ DPRINT("Opening file system\n"); IrpContext->Irp->IoStatus.Information = FILE_OPENED; +DeviceExt->OpenHandleCount++; return STATUS_SUCCESS; }
[ros-diffs] [reactos] 01/01: [CDFS] Remove the VPB field from the VCB. Not only it was never set, but the only times it was used was broken!
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fa0327d6c5f28d59838b240f3e363f82a90606ee commit fa0327d6c5f28d59838b240f3e363f82a90606ee Author: Pierre SchweitzerAuthorDate: Sat Nov 4 19:46:01 2017 +0100 [CDFS] Remove the VPB field from the VCB. Not only it was never set, but the only times it was used was broken! --- drivers/filesystems/cdfs/cdfs.h | 1 - drivers/filesystems/cdfs/fsctl.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/filesystems/cdfs/cdfs.h b/drivers/filesystems/cdfs/cdfs.h index 3d77e5b645..dff86cec2e 100644 --- a/drivers/filesystems/cdfs/cdfs.h +++ b/drivers/filesystems/cdfs/cdfs.h @@ -161,7 +161,6 @@ typedef struct KSPIN_LOCK FcbListLock; LIST_ENTRY FcbListHead; - PVPB Vpb; PDEVICE_OBJECT VolumeDevice; PDEVICE_OBJECT StorageDevice; PFILE_OBJECT StreamFileObject; diff --git a/drivers/filesystems/cdfs/fsctl.c b/drivers/filesystems/cdfs/fsctl.c index f153077017..44ad59cf22 100644 --- a/drivers/filesystems/cdfs/fsctl.c +++ b/drivers/filesystems/cdfs/fsctl.c @@ -419,7 +419,7 @@ CdfsMountVolume( DeviceExt->StreamFileObject->FsContext2 = Ccb; DeviceExt->StreamFileObject->SectionObjectPointer = >SectionObjectPointers; DeviceExt->StreamFileObject->PrivateCacheMap = NULL; -DeviceExt->StreamFileObject->Vpb = DeviceExt->Vpb; +DeviceExt->StreamFileObject->Vpb = DeviceToMount->Vpb; Ccb->PtrFileObject = DeviceExt->StreamFileObject; Fcb->FileObject = DeviceExt->StreamFileObject; Fcb->DevExt = (PDEVICE_EXTENSION)DeviceExt->StorageDevice;
[ros-diffs] [reactos] 01/01: [SETUPAPI] Update some functions to the current coding style, add annotations and add function names to the TRACE calls.
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f86e78d00b4eedc34d2ee94108be8c958d02e917 commit f86e78d00b4eedc34d2ee94108be8c958d02e917 Author: Eric KohlAuthorDate: Sat Nov 4 19:01:28 2017 +0100 [SETUPAPI] Update some functions to the current coding style, add annotations and add function names to the TRACE calls. --- dll/win32/setupapi/cfgmgr.c | 200 +++- 1 file changed, 142 insertions(+), 58 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index a578615e3b..b45e6dec7a 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -4440,10 +4440,13 @@ CM_Invert_Range_List( /*** * CM_Is_Dock_Station_Present [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Is_Dock_Station_Present( -PBOOL pbPresent) +CONFIGRET +WINAPI +CM_Is_Dock_Station_Present( +_Out_ PBOOL pbPresent) { -TRACE("%p\n", pbPresent); +TRACE("CM_Is_Dock_Station_Present(%p)\n", + pbPresent); return CM_Is_Dock_Station_Present_Ex(pbPresent, NULL); } @@ -4451,13 +4454,17 @@ CONFIGRET WINAPI CM_Is_Dock_Station_Present( /*** * CM_Is_Dock_Station_Present_Ex [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Is_Dock_Station_Present_Ex( -PBOOL pbPresent, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Is_Dock_Station_Present_Ex( +_Out_ PBOOL pbPresent, +_In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; CONFIGRET ret; -TRACE("%p %lx\n", pbPresent, hMachine); +TRACE("CM_Is_Dock_Station_Present_Ex(%p %lx)\n", + pbPresent, hMachine); if (pbPresent == NULL) return CR_INVALID_POINTER; @@ -4494,10 +4501,13 @@ CONFIGRET WINAPI CM_Is_Dock_Station_Present_Ex( /*** * CM_Is_Version_Available_Ex [SETUPAPI.@] */ -BOOL WINAPI CM_Is_Version_Available( - WORD wVersion) +BOOL +WINAPI +CM_Is_Version_Available( + _In_ WORD wVersion) { -TRACE("%hu\n", wVersion); +TRACE("CM_Is_Version_Available(%hu)\n", + wVersion); return CM_Is_Version_Available_Ex(wVersion, NULL); } @@ -4505,14 +4515,18 @@ BOOL WINAPI CM_Is_Version_Available( /*** * CM_Is_Version_Available_Ex [SETUPAPI.@] */ -BOOL WINAPI CM_Is_Version_Available_Ex( -WORD wVersion, HMACHINE hMachine) +BOOL +WINAPI +CM_Is_Version_Available_Ex( +_In_ WORD wVersion, +_In_opt_ HMACHINE hMachine) { RPC_BINDING_HANDLE BindingHandle = NULL; WORD wServerVersion; CONFIGRET ret; -TRACE("%hu %lx\n", wVersion, hMachine); +TRACE("CM_Is_Version_Available_Ex(%hu %lx)\n", + wVersion, hMachine); if (wVersion <= 0x400) return TRUE; @@ -4549,10 +4563,15 @@ BOOL WINAPI CM_Is_Version_Available_Ex( /*** * CM_Locate_DevNodeA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Locate_DevNodeA( -PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Locate_DevNodeA( +_Out_ PDEVINST pdnDevInst, +_In_opt_ DEVINSTID_A pDeviceID, +_In_ ULONG ulFlags) { -TRACE("%p %s %lu\n", pdnDevInst, pDeviceID, ulFlags); +TRACE("CM_Locate_DevNodeA(%p %s %lu)\n", + pdnDevInst, pDeviceID, ulFlags); return CM_Locate_DevNode_ExA(pdnDevInst, pDeviceID, ulFlags, NULL); } @@ -4560,10 +4579,15 @@ CONFIGRET WINAPI CM_Locate_DevNodeA( /*** * CM_Locate_DevNodeW [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Locate_DevNodeW( -PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Locate_DevNodeW( +_Out_ PDEVINST pdnDevInst, +_In_opt_ DEVINSTID_W pDeviceID, +_In_ ULONG ulFlags) { -TRACE("%p %s %lu\n", pdnDevInst, debugstr_w(pDeviceID), ulFlags); +TRACE("CM_Locate_DevNodeW(%p %s %lu)\n", + pdnDevInst, debugstr_w(pDeviceID), ulFlags); return CM_Locate_DevNode_ExW(pdnDevInst, pDeviceID, ulFlags, NULL); } @@ -4571,13 +4595,19 @@ CONFIGRET WINAPI CM_Locate_DevNodeW( /*** * CM_Locate_DevNode_ExA [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Locate_DevNode_ExA( -PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags, HMACHINE hMachine) +CONFIGRET +WINAPI +CM_Locate_DevNode_ExA( +_Out_ PDEVINST pdnDevInst, +_In_opt_ DEVINSTID_A pDeviceID, +_In_ ULONG ulFlags, +_In_opt_ HMACHINE hMachine) { DEVINSTID_W pDevIdW = NULL; CONFIGRET ret = CR_SUCCESS; -TRACE("%p %s %lu %lx\n", pdnDevInst, pDeviceID, ulFlags, hMachine); +TRACE("CM_Locate_DevNode_ExA(%p %s %lu %lx)\n", + pdnDevInst, pDeviceID, ulFlags, hMachine); if (pDeviceID
[ros-diffs] [reactos] 01/01: [SETUPAPI] Start the implementation of CM_Open_DevNode_Key_Ex().
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=78cf2a04a5ac284d237a5aeb8573dbca506580dc commit 78cf2a04a5ac284d237a5aeb8573dbca506580dc Author: Eric KohlAuthorDate: Sat Nov 4 17:26:38 2017 +0100 [SETUPAPI] Start the implementation of CM_Open_DevNode_Key_Ex(). --- dll/win32/setupapi/cfgmgr.c | 253 +--- 1 file changed, 241 insertions(+), 12 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index f2ad0d7f04..a578615e3b 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -164,6 +164,129 @@ GetRegistryPropertyType( } +static +VOID +SplitDeviceInstanceId( +_In_ PWSTR pszDeviceInstanceId, +_Out_ PWSTR pszDeviceId, +_Out_ PWSTR pszInstanceId) +{ +PWCHAR ptr; + +wcscpy(pszDeviceId, pszDeviceInstanceId); + +ptr = wcschr(pszDeviceId, L'\\'); +if (ptr != NULL) +{ +*ptr = UNICODE_NULL; +ptr++; + +wcscpy(pszInstanceId, ptr); +} +else +{ +*pszInstanceId = UNICODE_NULL; +} +} + + +static +CONFIGRET +GetDeviceInstanceKeyPath( +_In_ RPC_BINDING_HANDLE BindingHandle, +_In_ PWSTR pszDeviceInst, +_Out_ PWSTR pszKeyPath, +_Out_ PWSTR pszInstancePath, +_In_ ULONG ulHardwareProfile, +_In_ ULONG ulFlags) +{ +PWSTR pszBuffer = NULL; +ULONG ulType = 0; +ULONG ulTransferLength, ulLength; +CONFIGRET ret = CR_SUCCESS; + +TRACE("GetDeviceInstanceKeyPath()\n"); + +if (ulFlags & CM_REGISTRY_SOFTWARE) +{ +/* Software Key Path */ +ret = CR_CALL_NOT_IMPLEMENTED; +} +else +{ +/* Hardware Key Path */ + +ulTransferLength = 300 * sizeof(WCHAR); +ulLength = 300 * sizeof(WCHAR); + +pszBuffer = MyMalloc(ulTransferLength); +if (pszBuffer == NULL) +{ +ERR("MyMalloc() failed\n"); +ret = CR_OUT_OF_MEMORY; +goto done; +} + +ret = PNP_GetDeviceRegProp(BindingHandle, + pszDeviceInst, + CM_DRP_DRIVER, + , + (PVOID)pszBuffer, + , + , + 0); +if (ret != CR_SUCCESS) +{ +ERR("PNP_GetDeviceRegProp() failed (Error %lu)\n", ret); +goto done; +} + +TRACE("szBuffer: %S\n", pszBuffer); + +SplitDeviceInstanceId(pszBuffer, + pszBuffer, + pszInstancePath); + +TRACE("szBuffer: %S\n", pszBuffer); + +if (ulFlags & CM_REGISTRY_CONFIG) +{ +if (ulHardwareProfile == 0) +{ +wsprintfW(pszKeyPath, + L"%s\\%s\\%s\\%s", + L"System\\CurrentControlSet\\Hardware Profiles", + L"Current", + L"System\\CurrentControlSet\\Control\\Class", + pszBuffer); +} +else +{ +wsprintfW(pszKeyPath, + L"%s\\%04lu\\%s\\%s", + L"System\\CurrentControlSet\\Hardware Profiles", + ulHardwareProfile, + L"System\\CurrentControlSet\\Control\\Class", + pszBuffer); +} +} +else +{ +wsprintfW(pszKeyPath, + L"%s\\%s", + L"System\\CurrentControlSet\\Control\\Class", + pszBuffer); +} +} + +done: +if (pszBuffer != NULL) +MyFree(pszBuffer); + +return ret; +} + + /*** * CMP_GetBlockedDriverInfo [SETUPAPI.@] */ @@ -4855,12 +4978,18 @@ CONFIGRET WINAPI CM_Open_Class_Key_ExW( /*** * CM_Open_DevNode_Key [SETUPAPI.@] */ -CONFIGRET WINAPI CM_Open_DevNode_Key( -DEVINST dnDevNode, REGSAM samDesired, ULONG ulHardwareProfile, -REGDISPOSITION Disposition, PHKEY phkDevice, ULONG ulFlags) +CONFIGRET +WINAPI +CM_Open_DevNode_Key( +_In_ DEVINST dnDevNode, +_In_ REGSAM samDesired, +_In_ ULONG ulHardwareProfile, +_In_ REGDISPOSITION Disposition, +_Out_ PHKEY phkDevice, +_In_ ULONG ulFlags) { -TRACE("%lx %lx %lu %lx %p %lx\n", dnDevNode, samDesired, - ulHardwareProfile, Disposition, phkDevice, ulFlags); +TRACE("CM_Open_DevNode_Key(%lx %lx %lu %lx %p %lx)\n", + dnDevNode, samDesired, ulHardwareProfile, Disposition, phkDevice, ulFlags); return CM_Open_DevNode_Key_Ex(dnDevNode, samDesired, ulHardwareProfile, Disposition, phkDevice, ulFlags, NULL); } @@
[ros-diffs] [reactos] 01/01: [WIN32K] Check if the window being destroyed is currently tracked. (#103)
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9e4d2f1f9e9529bc1e8b9d8c3ab2e0b398fbf2b5 commit 9e4d2f1f9e9529bc1e8b9d8c3ab2e0b398fbf2b5 Author: Mark JansenAuthorDate: Sat Nov 4 15:00:54 2017 +0100 [WIN32K] Check if the window being destroyed is currently tracked. (#103) * [WIN32K] Check if the window being destroyed is currently tracked. CORE-13619 --- win32ss/user/ntuser/mouse.c | 20 win32ss/user/ntuser/window.c | 12 2 files changed, 32 insertions(+) diff --git a/win32ss/user/ntuser/mouse.c b/win32ss/user/ntuser/mouse.c index fc3827e345..46dfcfdd4f 100644 --- a/win32ss/user/ntuser/mouse.c +++ b/win32ss/user/ntuser/mouse.c @@ -342,6 +342,26 @@ UserSendMouseInput(MOUSEINPUT *pmi, BOOL bInjected) return TRUE; } +VOID +FASTCALL +IntRemoveTrackMouseEvent( +PDESKTOP pDesk) +{ +/* Generate a leave message */ +if (pDesk->dwDTFlags & DF_TME_LEAVE) +{ +UINT uMsg = (pDesk->htEx != HTCLIENT) ? WM_NCMOUSELEAVE : WM_MOUSELEAVE; +UserPostMessage(UserHMGetHandle(pDesk->spwndTrack), uMsg, 0, 0); +} +/* Kill the timer */ +if (pDesk->dwDTFlags & DF_TME_HOVER) +IntKillTimer(pDesk->spwndTrack, ID_EVENT_SYSTIMER_MOUSEHOVER, TRUE); + +/* Reset state */ +pDesk->dwDTFlags &= ~(DF_TME_LEAVE|DF_TME_HOVER); +pDesk->spwndTrack = NULL; +} + BOOL FASTCALL IntQueryTrackMouseEvent( diff --git a/win32ss/user/ntuser/window.c b/win32ss/user/ntuser/window.c index b8a3b59bfe..9c7627cece 100644 --- a/win32ss/user/ntuser/window.c +++ b/win32ss/user/ntuser/window.c @@ -381,6 +381,12 @@ DWORD FASTCALL IntGetWindowContextHelpId( PWND pWnd ) return HelpId; } + +VOID +FASTCALL +IntRemoveTrackMouseEvent( +PDESKTOP pDesk); + /*** * IntSendDestroyMsg */ @@ -422,6 +428,12 @@ static void IntSendDestroyMsg(HWND hWnd) { co_IntDestroyCaret(ti); } + + /* If the window being destroyed is currently tracked... */ + if (ti->rpdesk->spwndTrack == Window) + { + IntRemoveTrackMouseEvent(ti->rpdesk); + } } /* If the window being destroyed is the current clipboard owner... */
[ros-diffs] [reactos] 01/01: [DBGHELP] [XDK] [ARM64] Fix magic constant
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1eea9304e1713ee9494199df4ca05e8c84b0048b commit 1eea9304e1713ee9494199df4ca05e8c84b0048b Author: Stas'MAuthorDate: Fri Nov 3 19:48:19 2017 +0300 [DBGHELP] [XDK] [ARM64] Fix magic constant --- dll/win32/dbghelp/compat.h | 2 +- sdk/include/xdk/winnt_old.h | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/dll/win32/dbghelp/compat.h b/dll/win32/dbghelp/compat.h index 99cb40d996..46b07d18c6 100644 --- a/dll/win32/dbghelp/compat.h +++ b/dll/win32/dbghelp/compat.h @@ -115,7 +115,7 @@ INT __WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen, LPST // winnt.h #define IMAGE_FILE_MACHINE_ARMNT 0x1c4 #define IMAGE_FILE_MACHINE_POWERPC0x1f0 -#define IMAGE_FILE_MACHINE_ARM64 0x1c5 +#define IMAGE_FILE_MACHINE_ARM64 0xaa64 #define DLL_PROCESS_DETACH 0 #define DLL_PROCESS_ATTACH 1 #define DLL_THREAD_ATTACH 2 diff --git a/sdk/include/xdk/winnt_old.h b/sdk/include/xdk/winnt_old.h index f994f6bc6a..415f332a82 100644 --- a/sdk/include/xdk/winnt_old.h +++ b/sdk/include/xdk/winnt_old.h @@ -639,9 +639,7 @@ #define IMAGE_FILE_MACHINE_CEE0xC0EE #define IMAGE_FILE_MACHINE_TRICORE0x0520 #define IMAGE_FILE_MACHINE_CEF0x0CEF - -/* Wine extension */ -#define IMAGE_FILE_MACHINE_ARM64 0x1c5 +#define IMAGE_FILE_MACHINE_ARM64 0xAA64 #define IMAGE_FILE_EXPORT_DIRECTORY0 #define IMAGE_FILE_IMPORT_DIRECTORY1