[ros-diffs] [reactos] 01/01: [CDFS] Addendum to 03a9d8c: check for volume state (locked?) before opening a file CORE-13957

2017-11-04 Thread Pierre Schweitzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a2ed758a205cedcafbc836e4ca5ac6b87d60c2e6

commit a2ed758a205cedcafbc836e4ca5ac6b87d60c2e6
Author: Pierre Schweitzer 
AuthorDate: 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

2017-11-04 Thread Pierre Schweitzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=03a9d8c7ca880006b4aa37098e885206ddc106cc

commit 03a9d8c7ca880006b4aa37098e885206ddc106cc
Author: Pierre Schweitzer 
AuthorDate: 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 :-))

2017-11-04 Thread Pierre Schweitzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b30670ba43ec5b8901ddbc98aff11f0f8be5d70d

commit b30670ba43ec5b8901ddbc98aff11f0f8be5d70d
Author: Pierre Schweitzer 
AuthorDate: 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.

2017-11-04 Thread Eric Kohl
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=06f9e1220f87a5ec1a66230609c01533129846c1

commit 06f9e1220f87a5ec1a66230609c01533129846c1
Author: Eric Kohl 
AuthorDate: 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

2017-11-04 Thread Pierre Schweitzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=95447d2fd11604eeea4870ed7a6e9b3610eb1173

commit 95447d2fd11604eeea4870ed7a6e9b3610eb1173
Author: Pierre Schweitzer 
AuthorDate: 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!

2017-11-04 Thread Pierre Schweitzer
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=fa0327d6c5f28d59838b240f3e363f82a90606ee

commit fa0327d6c5f28d59838b240f3e363f82a90606ee
Author: Pierre Schweitzer 
AuthorDate: 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.

2017-11-04 Thread Eric Kohl
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f86e78d00b4eedc34d2ee94108be8c958d02e917

commit f86e78d00b4eedc34d2ee94108be8c958d02e917
Author: Eric Kohl 
AuthorDate: 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().

2017-11-04 Thread Eric Kohl
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=78cf2a04a5ac284d237a5aeb8573dbca506580dc

commit 78cf2a04a5ac284d237a5aeb8573dbca506580dc
Author: Eric Kohl 
AuthorDate: 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)

2017-11-04 Thread Mark Jansen
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9e4d2f1f9e9529bc1e8b9d8c3ab2e0b398fbf2b5

commit 9e4d2f1f9e9529bc1e8b9d8c3ab2e0b398fbf2b5
Author: Mark Jansen 
AuthorDate: 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

2017-11-04 Thread Stas'M
https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1eea9304e1713ee9494199df4ca05e8c84b0048b

commit 1eea9304e1713ee9494199df4ca05e8c84b0048b
Author: Stas'M 
AuthorDate: 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