windows-nt/Source/XPSP1/NT/printscan/print/spooler/splsetup/test/ci.c
2020-09-26 16:20:57 +08:00

188 lines
4.4 KiB
C

/*++
Copyright (c) 1994 - 1995 Microsoft Corporation
Module Name:
Ci.c
Abstract:
Class installer test program
Author:
Revision History:
--*/
#define NOMINMAX
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <cfgmgr32.h>
#include <setupapi.h>
#include <initguid.h>
#include <devguid.h>
#include <winspool.h>
#include <stdio.h>
#include <stdlib.h>
#include "..\splsetup.h"
HDEVINFO hDevInfo;
void
DoInstallWizard(
)
{
SP_INSTALLWIZARD_DATA InstWizData;
ZeroMemory(&InstWizData, sizeof(SP_INSTALLWIZARD_DATA));
InstWizData.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
InstWizData.ClassInstallHeader.InstallFunction = DIF_INSTALLWIZARD;
InstWizData.hwndWizardDlg = 0;
if ( !SetupDiSetClassInstallParams(hDevInfo,
NULL,
&InstWizData.ClassInstallHeader,
sizeof(InstWizData),
NULL) ) {
printf("SetupDiSetClassInstallParams fails with %d\n", GetLastError());
return;
}
SetupDiCallClassInstaller(DIF_INSTALLWIZARD, hDevInfo, NULL);
SetupDiCallClassInstaller(DIF_DESTROYWIZARDDATA, hDevInfo, NULL);
}
void
InstallDevice(
)
{
SP_DEVINFO_DATA DevInfoData;
DWORD Error;
HKEY hKey;
do {
PSetupSelectDriver(hDevInfo);
if ( GetLastError() != ERROR_SUCCESS )
break;
DevInfoData.cbSize = sizeof(DevInfoData);
if ( !SetupDiCreateDeviceInfo(hDevInfo,
TEXT("Printer"),
(LPGUID)&GUID_DEVCLASS_PRINTER,
NULL,
0,
DICD_GENERATE_ID | DICD_INHERIT_CLASSDRVS,
&DevInfoData) ) {
printf("SetupDiCreateDeviceInfo failed with %d\n", GetLastError());
continue;
}
if ( Error = CM_Open_DevNode_Key(DevInfoData.DevInst,
KEY_WRITE,
0,
RegDisposition_OpenAlways,
&hKey,
CM_REGISTRY_HARDWARE) ) {
printf("CM_Open_DevNode_Key failed with %d\n", Error);
continue;
}
if ( Error = RegSetValueEx(hKey,
TEXT("PortName"),
NULL,
REG_SZ,
TEXT("LPT1:"),
(lstrlen(TEXT("LPT1")) + 1 ) * sizeof(TCHAR)) ) {
printf("RegSetValueEx failed with %d\n", Error);
continue;
}
RegCloseKey(hKey);
SetupDiCallClassInstaller(DIF_INSTALLDEVICE, hDevInfo, &DevInfoData);
} while ( 1 );
}
void
InstallDriver(
)
{
}
int
#if !defined(_MIPS_) && !defined(_ALPHA_) && !defined(_PPC_)
_cdecl
#endif
main (argc, argv)
int argc;
char *argv[];
{
DWORD dwLastError;
hDevInfo = PSetupCreatePrinterDeviceInfoList(0);
if ( hDevInfo == INVALID_HANDLE_VALUE ) {
printf("%s: PSetupCreatePrinterDeviceInfoList fails with %d\n",
argv[0], GetLastError());
return 0;
}
DoInstallWizard();
InstallDevice();
PSetupDestroyPrinterDeviceInfoList(hDevInfo);
}
void
DumpDriverInfo3(
LPDRIVER_INFO_3 p3
)
{
LPTSTR pp;
printf("\tDriverInfo3:\n");
printf("\t----------------------------------------------------------\n");
printf("Driver Name : %ws\n", p3->pName);
printf("Driver File : %ws\n", p3->pDriverPath);
printf("Config File : %ws\n", p3->pConfigFile);
printf("Data File : %ws\n", p3->pDataFile);
printf("Help File : %ws\n", p3->pHelpFile);
if ( p3->pDependentFiles && *p3->pDependentFiles ) {
printf("Dependent File : ");
for ( pp = p3->pDependentFiles; pp && *pp ; pp += wcslen(pp) + 1 )
printf("%ws ", pp);
printf("\n");
} else
printf("Dependent File : %ws\n", p3->pDependentFiles);
printf("Monitor Name : %ws\n", p3->pMonitorName);
printf("DefaultData : %ws\n", p3->pDefaultDataType);
}
void
DumpSelectedDriver(
HDEVINFO hDevInfo
)
{
}