finished merging setupapi with Winehq CVS. Tommrow I will do a vendor drop of the latest Winehq CVS. Modified: trunk/reactos/lib/setupapi/devinst.c Modified: trunk/reactos/lib/setupapi/dirid.c Modified: trunk/reactos/lib/setupapi/queue.c _____
Modified: trunk/reactos/lib/setupapi/devinst.c --- trunk/reactos/lib/setupapi/devinst.c 2005-01-25 01:23:23 UTC (rev 13264) +++ trunk/reactos/lib/setupapi/devinst.c 2005-01-25 01:35:43 UTC (rev 13265) @@ -25,6 +25,7 @@
#include "windef.h" #include "winbase.h" +#include "winnt.h" #include "winreg.h" #include "winternl.h" #include "wingdi.h" @@ -41,13 +42,28 @@ WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
/* Unicode constants */ +static const WCHAR ClassGUID[] = {'C','l','a','s','s','G','U','I','D',0}; +static const WCHAR Class[] = {'C','l','a','s','s',0}; +static const WCHAR ClassInstall32[] = {'C','l','a','s','s','I','n','s','t','a','l','l','3','2',0}; +static const WCHAR NoDisplayClass[] = {'N','o','D','i','s','p','l','a','y','C','l','a','s','s',0}; +static const WCHAR NoInstallClass[] = {'N','o','I','s','t','a','l','l','C','l','a','s','s',0}; +static const WCHAR NoUseClass[] = {'N','o','U','s','e','C','l','a','s','s',0}; static const WCHAR NtExtension[] = {'.','N','T',0}; static const WCHAR NtPlatformExtension[] = {'.','N','T','x','8','6',0}; +static const WCHAR Version[] = {'V','e','r','s','i','o','n',0}; static const WCHAR WinExtension[] = {'.','W','i','n',0}; -static const WCHAR ClassInstall32[] = {'C','l','a','s','s','I','n','s','t','a','l','l','3','2',0}; -static const WCHAR Class[] = {'C','l','a','s','s',0};
+/* Registry key and value names */ +static const WCHAR ControlClass[] = {'S','y','s','t','e','m','\', + 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\' , + 'C','o','n','t','r','o','l','\', + 'C','l','a','s','s',0};
+static const WCHAR DeviceClasses[] = {'S','y','s','t','e','m','\', + 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\' , + 'C','o','n','t','r','o','l','\', + 'D','e','v','i','c','e','C','l','a','s','s','e','s',0}; +
/*********************************************************************** * SetupDiBuildClassInfoList (SETUPAPI.@) */ @@ -57,7 +73,7 @@ DWORD ClassGuidListSize, PDWORD RequiredSize) { - TRACE("SetupDiBuildClassInfoList() called\n"); + TRACE("\n"); return SetupDiBuildClassInfoListExW(Flags, ClassGuidList, ClassGuidListSize, RequiredSize, NULL, NULL); @@ -97,7 +113,7 @@ LONG lError; DWORD dwGuidListIndex = 0;
- TRACE("SetupDiBuildClassInfoListExW() called\n"); + TRACE("\n");
if (RequiredSize != NULL) *RequiredSize = 0; @@ -126,7 +142,7 @@ TRACE("RegEnumKeyExW() returns %ld\n", lError); if (lError == ERROR_SUCCESS || lError == ERROR_MORE_DATA) { - TRACE("Key name: %S\n", szKeyName); + TRACE("Key name: %p\n", szKeyName);
if (RegOpenKeyExW(hClassesKey, szKeyName, @@ -139,7 +155,7 @@ }
if (!RegQueryValueExW(hClassKey, - L"NoUseClass", + NoUseClass, NULL, NULL, NULL, @@ -152,7 +168,7 @@
if ((Flags & DIBCI_NOINSTALLCLASS) && (!RegQueryValueExW(hClassKey, - L"NoInstallClass", + NoInstallClass, NULL, NULL, NULL, @@ -165,7 +181,7 @@
if ((Flags & DIBCI_NODISPLAYCLASS) && (!RegQueryValueExW(hClassKey, - L"NoDisplayClass", + NoDisplayClass, NULL, NULL, NULL, @@ -178,14 +194,14 @@
RegCloseKey(hClassKey);
- TRACE("Guid: %S\n", szKeyName); + TRACE("Guid: %p\n", szKeyName); if (dwGuidListIndex < ClassGuidListSize) { if (szKeyName[0] == L'{' && szKeyName[37] == L'}') { szKeyName[37] = 0; } - TRACE("Guid: %S\n", &szKeyName[1]); + TRACE("Guid: %p\n", &szKeyName[1]);
UuidFromStringW(&szKeyName[1], &ClassGuidList[dwGuidListIndex]); @@ -302,7 +318,7 @@ TRACE("RegEnumKeyExW() returns %ld\n", lError); if (lError == ERROR_SUCCESS || lError == ERROR_MORE_DATA) { - TRACE("Key name: %S\n", szKeyName); + TRACE("Key name: %p\n", szKeyName);
if (RegOpenKeyExW(hClassesKey, szKeyName, @@ -322,20 +338,20 @@ (LPBYTE)szClassName, &dwLength)) { - TRACE("Class name: %S\n", szClassName); + TRACE("Class name: %p\n", szClassName);
- if (_wcsicmp(szClassName, ClassName) == 0) + if (strcmpiW(szClassName, ClassName) == 0) { TRACE("Found matching class name\n");
- TRACE("Guid: %S\n", szKeyName); + TRACE("Guid: %p\n", szKeyName); if (dwGuidListIndex < ClassGuidListSize) { if (szKeyName[0] == L'{' && szKeyName[37] == L'}') { szKeyName[37] = 0; } - TRACE("Guid: %S\n", &szKeyName[1]); + TRACE("Guid: %p\n", &szKeyName[1]);
UuidFromStringW(&szKeyName[1],
&ClassGuidList[dwGuidListIndex]); @@ -508,7 +524,7 @@ */ BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo) { - FIXME("%04lx\n", (DWORD)devinfo); + FIXME("%p\n", devinfo); return FALSE; }
@@ -571,13 +587,13 @@ PWSTR *Extension) { WCHAR szBuffer[MAX_PATH]; - OSVERSIONINFO OsVersionInfo; + OSVERSIONINFOW OsVersionInfo; DWORD dwLength; DWORD dwFullLength; LONG lLineCount = -1;
- OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - if (!GetVersionEx(&OsVersionInfo)) + OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); + if (!GetVersionExW(&OsVersionInfo)) { return FALSE; } @@ -707,7 +723,7 @@ Reserved); if (hKey == INVALID_HANDLE_VALUE) { - ERR("SetupDiOpenClassRegKeyExW() failed (Error %lu)\n", GetLastError()); + WARN("SetupDiOpenClassRegKeyExW() failed (Error %lu)\n", GetLastError()); return FALSE; }
@@ -855,8 +871,8 @@
if (!SetupGetLineTextW(NULL, hInf, - L"Version", - L"ClassGUID", + Version, + ClassGUID, Buffer, MAX_PATH, &RequiredSize)) @@ -864,7 +880,7 @@ return INVALID_HANDLE_VALUE; }
- lstrcpyW(FullBuffer, L"System\CurrentControlSet\Control\Class\"); + lstrcpyW(FullBuffer, ControlClass); lstrcatW(FullBuffer, Buffer);
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, @@ -875,8 +891,8 @@ { if (!SetupGetLineTextW(NULL, hInf, - L"Version", - L"Class", + Version, + Class, Buffer, MAX_PATH, &RequiredSize)) @@ -900,7 +916,7 @@ }
if (RegSetValueExW(hClassKey, - L"Class", + Class, 0, REG_SZ, (LPBYTE)Buffer, @@ -931,7 +947,7 @@ HKEY hClassKey;
- FIXME("Incomplete function.\n"); + FIXME("\n");
if ((Flags & DI_NOVCP) && (FileQueue == NULL || FileQueue == INVALID_HANDLE_VALUE)) { @@ -1001,7 +1017,6 @@
/* FIXME: More code! */
-ByeBye: if (bFileQueueCreated) SetupCloseFileQueue(FileQueue);
@@ -1051,7 +1066,7 @@ LPWSTR lpGuidString; HKEY hClassesKey; HKEY hClassKey; - LPWSTR lpKeyName; + LPCWSTR lpKeyName;
if (MachineName != NULL) { @@ -1061,11 +1076,11 @@
if (Flags == DIOCR_INSTALLER) { - lpKeyName = L"SYSTEM\CurrentControlSet\Control\Class"; + lpKeyName = ControlClass; } else if (Flags == DIOCR_INTERFACE) { - lpKeyName = L"SYSTEM\CurrentControlSet\Control\DeviceClasses"; + lpKeyName = DeviceClasses; } else { @@ -1109,7 +1124,6 @@ return hClassKey; }
-
/*********************************************************************** * SetupDiOpenDeviceInterfaceA (SETUPAPI.@) */ _____
Modified: trunk/reactos/lib/setupapi/dirid.c --- trunk/reactos/lib/setupapi/dirid.c 2005-01-25 01:23:23 UTC (rev 13264) +++ trunk/reactos/lib/setupapi/dirid.c 2005-01-25 01:35:43 UTC (rev 13265) @@ -29,6 +29,7 @@
#include "winuser.h" #include "winnls.h" #include "setupapi.h" +#include "shlobj.h" #include "wine/unicode.h" #include "setupapi_private.h" #include "wine/debug.h" @@ -36,6 +37,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
#define MAX_SYSTEM_DIRID DIRID_PRINTPROCESSOR +#define MIN_CSIDL_DIRID 0x4000 +#define MAX_CSIDL_DIRID 0x403f
struct user_dirid { @@ -47,6 +50,7 @@ static int alloc_user_dirids; /* number of allocated user dirids */ static struct user_dirid *user_dirids; static const WCHAR *system_dirids[MAX_SYSTEM_DIRID+1]; +static const WCHAR *csidl_dirids[MAX_CSIDL_DIRID-MIN_CSIDL_DIRID+1];
/* retrieve the string for unknown dirids */ static const WCHAR *get_unknown_dirid(void) @@ -64,6 +68,8 @@ return unknown_dirid; }
+static const WCHAR *get_csidl_dir(DWORD csidl); + /* create the string for a system dirid */ static const WCHAR *create_system_dirid( int dirid ) { @@ -76,8 +82,9 @@ static const WCHAR Viewers[] = {'\','v','i','e','w','e','r','s',0}; static const WCHAR System[] = {'\','s','y','s','t','e','m',0}; static const WCHAR Spool[] = {'\','s','p','o','o','l',0}; + static const WCHAR UserProfile[] = {'U','S','E','R','P','R','O','F','I','L','E',0};
- WCHAR buffer[MAX_PATH+16], *str; + WCHAR buffer[MAX_PATH+32], *str; int len;
switch(dirid) @@ -126,9 +133,11 @@ GetWindowsDirectoryW( buffer, MAX_PATH ); strcatW( buffer, Spool ); break; + case DIRID_USERPROFILE: + if (GetEnvironmentVariableW( UserProfile, buffer, MAX_PATH )) break; + return get_csidl_dir(CSIDL_PROFILE); case DIRID_LOADER: return C_Root; /* FIXME */ - case DIRID_USERPROFILE: /* FIXME */ case DIRID_COLOR: /* FIXME */ case DIRID_PRINTPROCESSOR: /* FIXME */ default: @@ -140,6 +149,21 @@ return str; }
+static const WCHAR *get_csidl_dir( DWORD csidl ) +{ + WCHAR buffer[MAX_PATH], *str; + int len; + + if (!SHGetSpecialFolderPathW( NULL, buffer, csidl, TRUE )) + { + FIXME( "CSIDL %lx not found\n", csidl ); + return get_unknown_dirid(); + } + len = (strlenW(buffer) + 1) * sizeof(WCHAR); + if ((str = HeapAlloc( GetProcessHeap(), 0, len ))) memcpy( str, buffer, len ); + return str; +} + /* retrieve the string corresponding to a dirid, or NULL if none */ const WCHAR *DIRID_get_string( HINF hinf, int dirid ) { @@ -154,6 +178,13 @@ ERR("user id %d not found\n", dirid ); return NULL; } + else if (dirid >= MIN_CSIDL_DIRID) + { + if (dirid > MAX_CSIDL_DIRID) return get_unknown_dirid(); + dirid -= MIN_CSIDL_DIRID; + if (!csidl_dirids[dirid]) csidl_dirids[dirid] = get_csidl_dir( dirid ); + return csidl_dirids[dirid]; + } else { if (dirid > MAX_SYSTEM_DIRID) return get_unknown_dirid(); _____
Modified: trunk/reactos/lib/setupapi/queue.c --- trunk/reactos/lib/setupapi/queue.c 2005-01-25 01:23:23 UTC (rev 13264) +++ trunk/reactos/lib/setupapi/queue.c 2005-01-25 01:35:43 UTC (rev 13265) @@ -173,7 +173,7 @@
*/ static BOOL build_filepathsW( const struct file_op *op, FILEPATHS_W *paths ) { - int src_len = 1, dst_len = 1; + unsigned int src_len = 1, dst_len = 1; WCHAR *source = (PWSTR)paths->Source, *target = (PWSTR)paths->Target;
if (op->src_root) src_len += strlenW(op->src_root) + 1; @@ -991,7 +991,7 @@ LPVOID VersionTarget; VS_FIXEDFILEINFO *TargetInfo; VS_FIXEDFILEINFO *SourceInfo; - INT length; + UINT length; WCHAR SubBlock[2]={'\',0}; DWORD ret;
@@ -1370,6 +1370,57 @@ UINT WINAPI SetupDefaultQueueCallbackW( PVOID context, UINT notification, UINT_PTR param1, UINT_PTR param2 ) { - FIXME( "notification %d params %x,%x\n", notification, param1, param2 ); + FILEPATHS_W *paths = (FILEPATHS_W *)param1; + + switch(notification) + { + case SPFILENOTIFY_STARTQUEUE: + TRACE( "start queue\n" ); + return TRUE; + case SPFILENOTIFY_ENDQUEUE: + TRACE( "end queue\n" ); + return 0; + case SPFILENOTIFY_STARTSUBQUEUE: + TRACE( "start subqueue %d count %d\n", param1, param2 ); + return TRUE; + case SPFILENOTIFY_ENDSUBQUEUE: + TRACE( "end subqueue %d\n", param1 ); + return 0; + case SPFILENOTIFY_STARTDELETE: + TRACE( "start delete %s\n", debugstr_w(paths->Target) ); + return FILEOP_DOIT; + case SPFILENOTIFY_ENDDELETE: + TRACE( "end delete %s\n", debugstr_w(paths->Target) ); + return 0; + case SPFILENOTIFY_DELETEERROR: + ERR( "delete error %d %s\n", paths->Win32Error, debugstr_w(paths->Target) ); return FILEOP_SKIP; + case SPFILENOTIFY_STARTRENAME: + TRACE( "start rename %s -> %s\n", debugstr_w(paths->Source), debugstr_w(paths->Target) ); + return FILEOP_DOIT; + case SPFILENOTIFY_ENDRENAME: + TRACE( "end rename %s -> %s\n", debugstr_w(paths->Source), debugstr_w(paths->Target) ); + return 0; + case SPFILENOTIFY_RENAMEERROR: + ERR( "rename error %d %s -> %s\n", paths->Win32Error, + debugstr_w(paths->Source), debugstr_w(paths->Target) ); + return FILEOP_SKIP; + case SPFILENOTIFY_STARTCOPY: + TRACE( "start copy %s -> %s\n", debugstr_w(paths->Source), debugstr_w(paths->Target) ); + return FILEOP_DOIT; + case SPFILENOTIFY_ENDCOPY: + TRACE( "end copy %s -> %s\n", debugstr_w(paths->Source), debugstr_w(paths->Target) ); + return 0; + case SPFILENOTIFY_COPYERROR: + ERR( "copy error %d %s -> %s\n", paths->Win32Error, + debugstr_w(paths->Source), debugstr_w(paths->Target) ); + return FILEOP_SKIP; + case SPFILENOTIFY_NEEDMEDIA: + TRACE( "need media\n" ); + return FILEOP_SKIP; + default: + FIXME( "notification %d params %x,%x\n", notification, param1, param2 ); + break; + } + return 0; }