Alexandre Julliard : kernel32: Abstract the key creation routine and move the key existence check to the top-level function .
Alexandre Julliard
julliard at winehq.org
Mon Mar 15 12:19:29 CDT 2010
Module: wine
Branch: master
Commit: 2bb93d39be49a78f6919879bacd78f60fa5efb69
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2bb93d39be49a78f6919879bacd78f60fa5efb69
Author: Alexandre Julliard <julliard at winehq.org>
Date: Sat Mar 13 19:24:46 2010 +0100
kernel32: Abstract the key creation routine and move the key existence check to the top-level function.
---
dlls/kernel32/oldconfig.c | 112 +++++++++++++-------------------------------
1 files changed, 33 insertions(+), 79 deletions(-)
diff --git a/dlls/kernel32/oldconfig.c b/dlls/kernel32/oldconfig.c
index c77e7b2..02dac06 100644
--- a/dlls/kernel32/oldconfig.c
+++ b/dlls/kernel32/oldconfig.c
@@ -55,6 +55,26 @@
WINE_DEFAULT_DEBUG_CHANNEL(reg);
+static NTSTATUS create_key( HANDLE root, const char *name, HANDLE *key, DWORD *disp )
+{
+ OBJECT_ATTRIBUTES attr;
+ UNICODE_STRING nameW;
+ NTSTATUS status;
+
+ attr.Length = sizeof(attr);
+ attr.RootDirectory = root;
+ attr.ObjectName = &nameW;
+ attr.Attributes = 0;
+ attr.SecurityDescriptor = NULL;
+ attr.SecurityQualityOfService = NULL;
+
+ if (!RtlCreateUnicodeStringFromAsciiz( &nameW, name )) return STATUS_NO_MEMORY;
+ status = NtCreateKey( key, KEY_ALL_ACCESS, &attr, 0, NULL, REG_OPTION_VOLATILE, disp );
+ if (status) ERR("Cannot create %s registry key\n", name );
+ RtlFreeUnicodeString( &nameW );
+ return status;
+}
+
/******************************************************************
* create_scsi_entry
*
@@ -69,7 +89,6 @@ static void create_scsi_entry( PSCSI_ADDRESS scsi_addr, LPCSTR lpDriver, UINT uD
static UCHAR uCdromNumber = 0;
static UCHAR uTapeNumber = 0;
- OBJECT_ATTRIBUTES attr;
UNICODE_STRING nameW;
WCHAR dataW[50];
DWORD sizeW;
@@ -83,52 +102,14 @@ static void create_scsi_entry( PSCSI_ADDRESS scsi_addr, LPCSTR lpDriver, UINT uD
HANDLE lunKey;
DWORD disp;
- attr.Length = sizeof(attr);
- attr.RootDirectory = 0;
- attr.ObjectName = &nameW;
- attr.Attributes = 0;
- attr.SecurityDescriptor = NULL;
- attr.SecurityQualityOfService = NULL;
-
- if (!RtlCreateUnicodeStringFromAsciiz( &nameW, "Machine\\HARDWARE" ) ||
- NtCreateKey( &scsiKey, KEY_ALL_ACCESS, &attr, 0, NULL, REG_OPTION_VOLATILE, &disp ))
- {
- ERR("Cannot create HARDWARE registry key\n" );
- return;
- }
- NtClose( scsiKey );
- RtlFreeUnicodeString( &nameW );
- if (disp == REG_OPENED_EXISTING_KEY) return;
-
- if (!RtlCreateUnicodeStringFromAsciiz( &nameW, "Machine\\HARDWARE\\DEVICEMAP" ) ||
- NtCreateKey( &scsiKey, KEY_ALL_ACCESS, &attr, 0, NULL, REG_OPTION_VOLATILE, &disp ))
- {
- ERR("Cannot create DEVICEMAP registry key\n" );
- return;
- }
+ if (create_key( 0, "Machine\\HARDWARE\\DEVICEMAP", &scsiKey, &disp )) return;
NtClose( scsiKey );
- RtlFreeUnicodeString( &nameW );
/* Ensure there is Scsi key */
- if (!RtlCreateUnicodeStringFromAsciiz( &nameW, "Machine\\HARDWARE\\DEVICEMAP\\Scsi" ) ||
- NtCreateKey( &scsiKey, KEY_ALL_ACCESS, &attr, 0,
- NULL, REG_OPTION_VOLATILE, &disp ))
- {
- ERR("Cannot create DEVICEMAP\\Scsi registry key\n" );
- return;
- }
- RtlFreeUnicodeString( &nameW );
+ if (create_key( 0, "Machine\\HARDWARE\\DEVICEMAP\\Scsi", &scsiKey, &disp )) return;
snprintf(buffer,sizeof(buffer),"Scsi Port %d",scsi_addr->PortNumber);
- attr.RootDirectory = scsiKey;
- if (!RtlCreateUnicodeStringFromAsciiz( &nameW, buffer ) ||
- NtCreateKey( &portKey, KEY_ALL_ACCESS, &attr, 0,
- NULL, REG_OPTION_VOLATILE, &disp ))
- {
- ERR("Cannot create DEVICEMAP\\Scsi Port registry key\n" );
- return;
- }
- RtlFreeUnicodeString( &nameW );
+ if (create_key( scsiKey, buffer, &portKey, &disp )) return;
RtlCreateUnicodeStringFromAsciiz( &nameW, "Driver" );
RtlMultiByteToUnicodeN( dataW, sizeof(dataW), &sizeW, lpDriver, strlen(lpDriver)+1);
@@ -158,49 +139,17 @@ static void create_scsi_entry( PSCSI_ADDRESS scsi_addr, LPCSTR lpDriver, UINT uD
}
snprintf(buffer, sizeof(buffer),"Scsi Bus %d", scsi_addr->PathId);
- attr.RootDirectory = portKey;
- if (!RtlCreateUnicodeStringFromAsciiz( &nameW, buffer ) ||
- NtCreateKey( &busKey, KEY_ALL_ACCESS, &attr, 0,
- NULL, REG_OPTION_VOLATILE, &disp ))
- {
- ERR("Cannot create DEVICEMAP\\Scsi Port\\Scsi Bus registry key\n" );
- return;
- }
- RtlFreeUnicodeString( &nameW );
+ if (create_key( portKey, buffer, &busKey, &disp )) return;
- attr.RootDirectory = busKey;
/* FIXME: get real controller Id for SCSI */
- if (!RtlCreateUnicodeStringFromAsciiz( &nameW, "Initiator Id 255" ) ||
- NtCreateKey( &targetKey, KEY_ALL_ACCESS, &attr, 0,
- NULL, REG_OPTION_VOLATILE, &disp ))
- {
- ERR("Cannot create DEVICEMAP\\Scsi Port\\Scsi Bus\\Initiator Id 255 registry key\n" );
- return;
- }
- RtlFreeUnicodeString( &nameW );
+ if (create_key( busKey, buffer, &targetKey, &disp )) return;
NtClose( targetKey );
snprintf(buffer, sizeof(buffer),"Target Id %d", scsi_addr->TargetId);
- attr.RootDirectory = busKey;
- if (!RtlCreateUnicodeStringFromAsciiz( &nameW, buffer ) ||
- NtCreateKey( &targetKey, KEY_ALL_ACCESS, &attr, 0,
- NULL, REG_OPTION_VOLATILE, &disp ))
- {
- ERR("Cannot create DEVICEMAP\\Scsi Port\\Scsi Bus 0\\Target Id registry key\n" );
- return;
- }
- RtlFreeUnicodeString( &nameW );
+ if (create_key( busKey, buffer, &targetKey, &disp )) return;
snprintf(buffer, sizeof(buffer),"Logical Unit Id %d", scsi_addr->Lun);
- attr.RootDirectory = targetKey;
- if (!RtlCreateUnicodeStringFromAsciiz( &nameW, buffer ) ||
- NtCreateKey( &lunKey, KEY_ALL_ACCESS, &attr, 0,
- NULL, REG_OPTION_VOLATILE, &disp ))
- {
- ERR("Cannot create DEVICEMAP\\Scsi Port\\Scsi Bus 0\\Target Id registry key\\Logical Unit Id\n" );
- return;
- }
- RtlFreeUnicodeString( &nameW );
+ if (create_key( targetKey, buffer, &lunKey, &disp )) return;
switch (uDriveType)
{
@@ -445,6 +394,11 @@ static void create_hardware_branch(void)
*/
void convert_old_config(void)
{
+ HANDLE key;
+ DWORD disp;
+
/* create some hardware keys (FIXME: should not be done here) */
- create_hardware_branch();
+ if (create_key( 0, "Machine\\HARDWARE", &key, &disp )) return;
+ NtClose( key );
+ if (disp != REG_OPENED_EXISTING_KEY) create_hardware_branch();
}
More information about the wine-cvs
mailing list