/*++ w95fdump.c Copyright (c) 1997 Microsoft Corporation This utility dumps configuration information about the win95 fax. It pulls this information from the registry... This is primarily a warm-up application for win95->NT migration; the migration DLL will need to get all of this information to configure the NT setup. Author: Brian Dewey (t-briand) 1997-7-18 --*/ #include #include #include #include #include #include "migrate.h" // Includes my migration prototypes. // ------------------------------------------------------------ // Prototypes BOOL EnumUsers(); // ------------------------------------------------------------ // main int _cdecl main(int argc, char *argv[]) { LPCSTR ProductID; // Will hold the ID string from my DLL. UINT DllVersion; // Holds the version of the DLL. LPINT CodePageArray; // Locale info. LPCSTR ExeNamesBuf; // Executables to look for. LPVOID Reserved = NULL; // Placeholder. // Print banner. fprintf(stderr, "Win32 Fax Configuration Dump Utility\n"); fprintf(stderr, "Copyright (c) 1997 Microsoft Corporation\n"); QueryVersion(&ProductID, &DllVersion, &CodePageArray, &ExeNamesBuf, Reserved); fprintf(stderr, "Library '%s' version %d.\n", ProductID, DllVersion); // Simulate the initialization. Initialize9x(".", ".", Reserved); // This will try to gather all user information. if(EnumUsers()) fprintf(stderr, "User migration succeeded.\n"); else { fprintf(stderr, "User migration failed, exiting...\n"); return 1; } // Finally, try to migrate the system. if(MigrateSystem9x(NULL, ".\\unattend.txt", Reserved) != ERROR_SUCCESS) { fprintf(stderr, "System migration failed.\n"); return 1; } else { fprintf(stderr, "System migration succeeded.\n"); } return 0; } // ------------------------------------------------------------ // Auxiliary functions BOOL EnumUsers() { DWORD dwIndex; // Index of the HKEY_USERS subkey. TCHAR szKeyName[MAX_PATH]; // Name of the subkey. DWORD cbBufSize; // Size of the name buffer. FILETIME ftTime; // Will hold the time the key was last modified. HKEY hUserKey; // Registry key for a user. LONG lResult; // Result codes from API calls. LONGLONG llDiskSpace, // Total disk space used. llComponentSpace; // Component space required. dwIndex = 0; cbBufSize = sizeof(szKeyName); while(RegEnumKeyEx(HKEY_USERS, // We're enumerating through the users. dwIndex++, // Keep incrementing the index! szKeyName, // Will hold the name of the subkey. &cbBufSize, // Will hold the # of characters in the key name. NULL, // Reserved; must be NULL. NULL, // Class info (I don't need this). NULL, // size of class info -- not needed. &ftTime) == ERROR_SUCCESS) { _tprintf(TEXT("User %s.\n"), szKeyName); // Open the key. if((lResult = RegOpenKeyEx(HKEY_USERS, szKeyName, 0, // Zero options. KEY_READ, // Read-only permission. &hUserKey)) != ERROR_SUCCESS) { // FIXBKD: Use FormatMessage _ftprintf(stderr, TEXT("EnumUsers:Unable to open key for user %s.\n"), szKeyName); return FALSE; } // Call the migration DLL MigrateUser9x routine. MigrateUser9x( NULL, // No window for UI. "unattend.txt", // Sample unattend file. hUserKey, // Key to the user's part of the registry. szKeyName, // Pass in the user's name. &llComponentSpace // Receive the amount of space needed. ); RegCloseKey(hUserKey); // Close the key. cbBufSize = sizeof(szKeyName); // Reset size indicator. } return TRUE; }