windows-nt/Source/XPSP1/NT/printscan/fax/setup/win9xupg/w95fdump/w95fdump.c

117 lines
4.2 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
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 <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <setupapi.h>
#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;
}