133 lines
2.6 KiB
C
133 lines
2.6 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
migid.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Implements a small program that loads a migration DLL and prints
|
||
|
its vendor info.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
<full name> (<alias>) <date>
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
<alias> <date> <comments>
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "pch.h"
|
||
|
|
||
|
|
||
|
VOID
|
||
|
HelpAndExit (
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
printf ("Command Line Syntax:\n\n"
|
||
|
"migid [directory]\n\n"
|
||
|
"directory - Specifies the directory migrate.dll is in.\n"
|
||
|
" If not specified, the current directory is\n"
|
||
|
" used.\n"
|
||
|
);
|
||
|
|
||
|
exit (1);
|
||
|
}
|
||
|
|
||
|
|
||
|
INT
|
||
|
__cdecl
|
||
|
main (
|
||
|
INT argc,
|
||
|
CHAR *argv[]
|
||
|
)
|
||
|
{
|
||
|
HANDLE Library;
|
||
|
TCHAR Path[MAX_TCHAR_PATH];
|
||
|
DWORD d;
|
||
|
P_QUERY_VERSION QueryVersion;
|
||
|
PCSTR ProductID = NULL;
|
||
|
UINT DllVersion = 0;
|
||
|
PINT CodePageArray;
|
||
|
PCSTR ExeNamesBuf;
|
||
|
PVENDORINFO VendorInfo = NULL;
|
||
|
BOOL SpecCompliant = TRUE;
|
||
|
|
||
|
if (argc == 0 || argc > 2) {
|
||
|
HelpAndExit();
|
||
|
}
|
||
|
|
||
|
if (argc == 2) {
|
||
|
d = GetFileAttributes (argv[1]);
|
||
|
if (d == INVALID_ATTRIBUTES) {
|
||
|
HelpAndExit();
|
||
|
}
|
||
|
|
||
|
if (!(d & FILE_ATTRIBUTE_DIRECTORY)) {
|
||
|
HelpAndExit();
|
||
|
}
|
||
|
|
||
|
lstrcpy (Path, argv[1]);
|
||
|
lstrcat (Path, TEXT("\\"));
|
||
|
} else {
|
||
|
lstrcpy (Path, TEXT(".\\"));
|
||
|
}
|
||
|
|
||
|
lstrcat (Path, TEXT("migrate.dll"));
|
||
|
|
||
|
Library = LoadLibrary (Path);
|
||
|
if (!Library) {
|
||
|
fprintf (stderr, "Can't open %s\n", Path);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
(FARPROC) QueryVersion = GetProcAddress (Library, "QueryVersion");
|
||
|
if (!QueryVersion) {
|
||
|
fprintf (stderr, "%s is not spec-compliant\n", Path);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
__try {
|
||
|
QueryVersion (&ProductID, &DllVersion, &CodePageArray, &ExeNamesBuf, &VendorInfo);
|
||
|
|
||
|
if (!ProductID || !VendorInfo) {
|
||
|
SpecCompliant = FALSE;
|
||
|
}
|
||
|
|
||
|
printf ("Product ID: %s\n"
|
||
|
"DLL Version: %u\n"
|
||
|
"Company Name: %s\n"
|
||
|
"Support Number: %s\n"
|
||
|
"Support URL: %s\n"
|
||
|
"Failure Help: %s\n",
|
||
|
ProductID ? ProductID : "(nul)",
|
||
|
DllVersion,
|
||
|
VendorInfo ? VendorInfo->CompanyName : "(nul)",
|
||
|
VendorInfo ? VendorInfo->SupportNumber : "(nul)",
|
||
|
VendorInfo ? VendorInfo->SupportUrl : "(nul)",
|
||
|
VendorInfo ? VendorInfo->InstructionsToUser : "(nul)"
|
||
|
);
|
||
|
|
||
|
}
|
||
|
|
||
|
__except (TRUE) {
|
||
|
SpecCompliant = FALSE;
|
||
|
}
|
||
|
|
||
|
if (!SpecCompliant) {
|
||
|
fprintf (stderr, "%s is not spec-compliant\n", Path);
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
|