547 lines
17 KiB
C++
547 lines
17 KiB
C++
|
#include "stdafx.h"
|
||
|
#include "mon.h"
|
||
|
|
||
|
const TCHAR GenericMannufacturerSection[] =
|
||
|
"[Generic]\n\
|
||
|
%Unknown.DeviceDesc%=Unknown.Install,Monitor\\Default_Monitor ; for auto-install\n\
|
||
|
%Unknown.DeviceDesc%=Unknown.Install ; for pick list\n\
|
||
|
%*PNP09FF.DeviceDesc%=VESADDC.Install,*PNP09FF\n\
|
||
|
\n\
|
||
|
%Laptop640.DeviceDesc%=Laptop640.Install,Monitor\\MS_0001\n\
|
||
|
%Laptop800.DeviceDesc%=Laptop800.Install,Monitor\\MS_0002\n\
|
||
|
%Laptop1024.DeviceDesc%=Laptop1024.Install,Monitor\\MS_0003\n\
|
||
|
%Laptop1152.DeviceDesc%=Laptop1152.Install,Monitor\\MS_0004\n\
|
||
|
%Laptop1280.DeviceDesc%=Laptop1280.Install,Monitor\\MS_0005\n\
|
||
|
%Laptop1600.DeviceDesc%=Laptop1600.Install,Monitor\\MS_0006\n\
|
||
|
\n\
|
||
|
%TVGen.DeviceDesc%=640.Install,Monitor\\PNP09FE\n\
|
||
|
%TVGen.DeviceDesc%=640.Install,Monitor\\*PNP09FE\n\
|
||
|
\n\
|
||
|
%640.DeviceDesc%=640.Install,Monitor\\MS_0640\n\
|
||
|
%800.DeviceDesc%=800.Install,Monitor\\MS_0800\n\
|
||
|
%1024.DeviceDesc%=1024.Install,Monitor\\MS_1024\n\
|
||
|
%1280.DeviceDesc%=1280.Install,Monitor\\MS_1280\n\
|
||
|
%1600.DeviceDesc%=1600.Install,Monitor\\MS_1600\n\n";
|
||
|
|
||
|
const TCHAR GenericInstallSection[] =
|
||
|
"; -------------- Generic types\n\
|
||
|
[Unknown.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=Unknown.AddReg\n\
|
||
|
\n\
|
||
|
[VESADDC.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=VESADDC.AddReg, 1600, DPMS\n\
|
||
|
\n\
|
||
|
[Laptop640.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=640VESA60, DPMS\n\
|
||
|
\n\
|
||
|
[Laptop800.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=800VESA60, DPMS\n\
|
||
|
\n\
|
||
|
[Laptop1024.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=1024VESA60, DPMS\n\
|
||
|
\n\
|
||
|
[Laptop1152.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=1152VESA60, DPMS\n\
|
||
|
\n\
|
||
|
[Laptop1280.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=1280VESA60, DPMS\n\
|
||
|
\n\
|
||
|
[Laptop1600.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=1600VESA60, DPMS\n\
|
||
|
\n\
|
||
|
[640.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=640\n\
|
||
|
\n\
|
||
|
[800.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=800\n\
|
||
|
\n\
|
||
|
[1024.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=1024\n\
|
||
|
\n\
|
||
|
[1280.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=1280\n\
|
||
|
\n\
|
||
|
[1600.Install]\n\
|
||
|
DelReg=DCR\n\
|
||
|
AddReg=1600\n\n";
|
||
|
|
||
|
const TCHAR GenericAddRegSection[] =
|
||
|
"; -------------- Generic types\n\
|
||
|
[Unknown.AddReg]\n\
|
||
|
HKR,\"MODES\\640,480\"\n\
|
||
|
\n\
|
||
|
[VESADDC.AddReg]\n\
|
||
|
HKR,\"MODES\\1600,1200\"\n\
|
||
|
\n\
|
||
|
[VGA.AddReg]\n\
|
||
|
HKR,\"MODES\\640,480\",Mode1,,\"31.5,50.0-70.0,-,-\"\n\
|
||
|
\n\
|
||
|
[640VESA60]\n\
|
||
|
HKR,\"MODES\\640,480\",Mode1,,\"60.0,50.0,-,-\"\n\
|
||
|
HKR,,PreferredMode,,\"640,480,60\"\n\
|
||
|
\n\
|
||
|
[800VESA60]\n\
|
||
|
HKR,\"MODES\\640,480\",Mode1,,\"60.0,50.0,-,-\"\n\
|
||
|
HKR,\"MODES\\800,600\",Mode1,,\"60.0,60.0,+,+\"\n\
|
||
|
HKR,,PreferredMode,,\"800,600,60\"\n\
|
||
|
\n\
|
||
|
[1024VESA60]\n\
|
||
|
HKR,\"MODES\\640,480\",Mode1,,\"60.0,50.0,-,-\"\n\
|
||
|
HKR,\"MODES\\1024,768\",Mode1,,\"60.0,60.0,+,+\"\n\
|
||
|
HKR,,PreferredMode,,\"1024,768,60\"\n\
|
||
|
\n\
|
||
|
[1152VESA60]\n\
|
||
|
HKR,\"MODES\\640,480\",Mode1,,\"60.0,50.0,-,-\"\n\
|
||
|
HKR,\"MODES\\1152,864\",Mode1,,\"60.0,60.0,+,+\"\n\
|
||
|
HKR,,PreferredMode,,\"1152,864,60\"\n\
|
||
|
\n\
|
||
|
[1280VESA60]\n\
|
||
|
HKR,\"MODES\\640,480\",Mode1,,\"60.0,50.0,-,-\"\n\
|
||
|
HKR,\"MODES\\1280,1024\",Mode1,,\"48.0,65.0,+,+\"\n\
|
||
|
HKR,,PreferredMode,,\"1280,1024,60\"\n\
|
||
|
\n\
|
||
|
[1600VESA60]\n\
|
||
|
HKR,\"MODES\\640,480\",Mode1,,\"60.0,60.0,-,-\"\n\
|
||
|
HKR,\"MODES\\1600,1200\",Mode1,,\"48.0,75.0,+,+\"\n\
|
||
|
HKR,,PreferredMode,,\"1600,1200,60\"\n\n";
|
||
|
|
||
|
const TCHAR GenericStrings[] =
|
||
|
"MonitorClassName=\"Monitors\"\n\
|
||
|
MS=\"Microsoft\"\n\
|
||
|
\n\
|
||
|
Generic=\"(Standard monitor types)\"\n\
|
||
|
Unknown.DeviceDesc=\"Default Monitor\"\n\
|
||
|
\n\
|
||
|
*PNP09FF.DeviceDesc = \"Plug and Play Monitor\"\n\
|
||
|
\n\
|
||
|
Laptop640.DeviceDesc = \"Digital Flat Panel (640x480)\"\n\
|
||
|
Laptop800.DeviceDesc = \"Digital Flat Panel (800x600)\"\n\
|
||
|
Laptop1024.DeviceDesc =\"Digital Flat Panel (1024x768)\"\n\
|
||
|
Laptop1152.DeviceDesc =\"Digital Flat Panel (1152x864)\"\n\
|
||
|
Laptop1280.DeviceDesc =\"Digital Flat Panel (1280x1024)\"\n\
|
||
|
Laptop1600.DeviceDesc =\"Digital Flat Panel (1600x1200)\"\n\
|
||
|
\n\
|
||
|
TVGen.DeviceDesc =\"Generic Television\"\n\
|
||
|
\n\
|
||
|
640.DeviceDesc = \"Standard VGA 640x480\"\n\
|
||
|
800.DeviceDesc = \"Super VGA 800x600\"\n\
|
||
|
1024.DeviceDesc = \"Super VGA 1024x768\"\n\
|
||
|
1280.DeviceDesc = \"Super VGA 1280x1024\"\n\
|
||
|
1600.DeviceDesc = \"Super VGA 1600x1200\"\n\n";
|
||
|
|
||
|
|
||
|
VOID CSumInf::DumpMonitorInf(LPCSTR DumpFilePath, int sizeLimit)
|
||
|
{
|
||
|
TCHAR DumpFileName[256];
|
||
|
sprintf(DumpFileName, "%s\\tmp.txt", DumpFilePath);
|
||
|
|
||
|
ASSERT(m_ManufacturerArray.GetSize());
|
||
|
|
||
|
if (sizeLimit == 0xFFFFFFFF)
|
||
|
{
|
||
|
sprintf(DumpFileName, "%s\\MONITOR.INF", DumpFilePath);
|
||
|
DumpManufacturers(DumpFileName, 0, m_ManufacturerArray.GetSize(), 1);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int fileBreaks[64], numFileBreaks = 0, fileSize = 0;
|
||
|
int start = 0, end = 0;
|
||
|
|
||
|
// 0
|
||
|
// 0 1 2
|
||
|
// 0 1 2 | 3 4 | 5
|
||
|
// e e e=6
|
||
|
while (1)
|
||
|
{
|
||
|
end++;
|
||
|
if (end >= m_ManufacturerArray.GetSize())
|
||
|
{
|
||
|
fileBreaks[numFileBreaks++] = end;
|
||
|
break;
|
||
|
}
|
||
|
fileSize = DumpManufacturers(DumpFileName, start, end-start, (start == 0) ? 6 : 0);
|
||
|
if (fileSize >= sizeLimit)
|
||
|
{
|
||
|
fileBreaks[numFileBreaks++] = end;
|
||
|
start = end;
|
||
|
fileSize = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
sprintf(DumpFileName, "%s\\MONITOR.INF", DumpFilePath);
|
||
|
DumpManufacturers(DumpFileName, 0, fileBreaks[0], numFileBreaks);
|
||
|
for (int i = 0; i < (numFileBreaks-1); i++)
|
||
|
{
|
||
|
sprintf(DumpFileName, "%s\\MONITOR%d.INF", DumpFilePath, i+2);
|
||
|
DumpManufacturers(DumpFileName, fileBreaks[i], fileBreaks[i+1]-fileBreaks[i], 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int CSumInf::DumpManufacturers(LPCSTR DumpFileName, int start, int num, int numInfs)
|
||
|
{
|
||
|
FILE *fpOut = fopen(DumpFileName, "w");
|
||
|
|
||
|
LPCSTR lpFileName = strrchr(DumpFileName, '\\');
|
||
|
ASSERT(lpFileName != NULL);
|
||
|
lpFileName++;
|
||
|
|
||
|
if (fpOut == NULL)
|
||
|
return 0;
|
||
|
|
||
|
fprintf(fpOut, "; %s\n;\n", lpFileName);
|
||
|
|
||
|
DumpCommonHeader(fpOut, numInfs);
|
||
|
|
||
|
int end = min(start+num, m_ManufacturerArray.GetSize());
|
||
|
for (int i = start; i < end; i++)
|
||
|
{
|
||
|
CManufacturer *pManufacturer = (CManufacturer*)m_ManufacturerArray[i];
|
||
|
fprintf(fpOut, "%s=%s\n", pManufacturer->AliasName, pManufacturer->name);
|
||
|
}
|
||
|
|
||
|
fprintf(fpOut, "\n\n;-------------------------------------------------\n");
|
||
|
fprintf(fpOut, "; Manufacturer Sections\n\n");
|
||
|
|
||
|
if (numInfs)
|
||
|
{
|
||
|
fprintf(fpOut, "%s", GenericMannufacturerSection);
|
||
|
}
|
||
|
|
||
|
for (i = start; i < end; i++)
|
||
|
{
|
||
|
CManufacturer *pManufacturer = (CManufacturer*)m_ManufacturerArray[i];
|
||
|
DumpManufactureSection(fpOut, pManufacturer);
|
||
|
}
|
||
|
|
||
|
fprintf(fpOut, "\n;-------------------------------------------------\n");
|
||
|
fprintf(fpOut, "; Install sections\n\n");
|
||
|
|
||
|
if (numInfs)
|
||
|
{
|
||
|
fprintf(fpOut, "%s", GenericInstallSection);
|
||
|
}
|
||
|
|
||
|
for (i = start; i < end; i++)
|
||
|
{
|
||
|
CManufacturer *pManufacturer = (CManufacturer*)m_ManufacturerArray[i];
|
||
|
DumpInstallSection(fpOut, pManufacturer);
|
||
|
}
|
||
|
|
||
|
fprintf(fpOut, "\n;-------------------------------------------------\n");
|
||
|
fprintf(fpOut, "; Common AddReg sections\n");
|
||
|
|
||
|
DumpCommonAddRegSection(fpOut, start, end);
|
||
|
|
||
|
fprintf(fpOut, "\n;-------------------------------------------------\n");
|
||
|
fprintf(fpOut, "; Model AddReg sections\n\n");
|
||
|
|
||
|
if (numInfs)
|
||
|
{
|
||
|
fprintf(fpOut, "%s", GenericAddRegSection);
|
||
|
}
|
||
|
|
||
|
for (i = start; i < end; i++)
|
||
|
{
|
||
|
CManufacturer *pManufacturer = (CManufacturer*)m_ManufacturerArray[i];
|
||
|
DumpAddRegSection(fpOut, pManufacturer);
|
||
|
}
|
||
|
|
||
|
fprintf(fpOut, "\n;-------------------------------------------------\n");
|
||
|
fprintf(fpOut, "; User visible strings\n\n");
|
||
|
fprintf(fpOut, "[Strings]\n");
|
||
|
|
||
|
if (numInfs)
|
||
|
{
|
||
|
fprintf(fpOut, "%s", GenericStrings);
|
||
|
}
|
||
|
else
|
||
|
fprintf(fpOut, "MS=\"Microsoft\"\n\n");
|
||
|
|
||
|
DumpCommonStringSection(fpOut, start, end);
|
||
|
|
||
|
fpos_t fileSize = 0;
|
||
|
ASSERT( fgetpos(fpOut, &fileSize) == 0 );
|
||
|
|
||
|
fclose(fpOut);
|
||
|
|
||
|
return (int)fileSize;
|
||
|
}
|
||
|
|
||
|
VOID CSumInf::DumpManufactureSection(FILE *fp, CManufacturer *pManufacturer)
|
||
|
{
|
||
|
fprintf(fp, "[%s]\n", pManufacturer->name);
|
||
|
for (int i = 0; i < pManufacturer->MonitorArray.GetSize(); i++)
|
||
|
{
|
||
|
CMonitor *pMonitor = (CMonitor*)pManufacturer->MonitorArray[i];
|
||
|
fprintf(fp, "%s=%s, %s\n",
|
||
|
pMonitor->AliasName,
|
||
|
pMonitor->InstallSectionName,
|
||
|
pMonitor->ID);
|
||
|
}
|
||
|
fprintf(fp, "\n");
|
||
|
}
|
||
|
|
||
|
VOID CSumInf::DumpInstallSection(FILE *fp, CManufacturer *pManufacturer)
|
||
|
{
|
||
|
fprintf(fp, "; -------------- %s\n", pManufacturer->name);
|
||
|
for (int i = 0; i < pManufacturer->MonitorArray.GetSize(); i++)
|
||
|
{
|
||
|
CMonitor *pMonitor = (CMonitor*)pManufacturer->MonitorArray[i];
|
||
|
/////////////////////////////////////////////////////////////
|
||
|
// If this Monitor has duplicated section, ignore it
|
||
|
if (pMonitor->bDupInstSection)
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
fprintf(fp, "[%s]\n", pMonitor->InstallSectionName);
|
||
|
fprintf(fp, "DelReg=DCR\n");
|
||
|
fprintf(fp, "AddReg=%s", pMonitor->AddRegSectionName);
|
||
|
for (int j = 0; j < pMonitor->numCommonSects; j++)
|
||
|
fprintf(fp, ", %s", pMonitor->CommonSects[j]->sectName);
|
||
|
fprintf(fp, "\n\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
VOID CSumInf::DumpCommonAddRegSection(FILE *fp, int start, int end)
|
||
|
{
|
||
|
fprintf(fp, "\n[DCR]\n");
|
||
|
fprintf(fp, "HKR,MODES\n");
|
||
|
fprintf(fp, "HKR,,MaxResolution\n");
|
||
|
fprintf(fp, "HKR,,DPMS\n");
|
||
|
fprintf(fp, "HKR,,ICMProfile\n\n");
|
||
|
|
||
|
for (int i = 0; i < gCommonSections.GetSize(); i++)
|
||
|
{
|
||
|
LPCOMMON_SECTION pSection = gCommonSections.GetAt(i);
|
||
|
pSection->refCount = 0;
|
||
|
}
|
||
|
|
||
|
for (i = start; i < end; i++)
|
||
|
{
|
||
|
CManufacturer *pManufacturer = (CManufacturer*)m_ManufacturerArray[i];
|
||
|
for (int j = 0; j < pManufacturer->MonitorArray.GetSize(); j++)
|
||
|
{
|
||
|
CMonitor *pMonitor = (CMonitor*)pManufacturer->MonitorArray[j];
|
||
|
for (int k = 0; k < pMonitor->numCommonSects; k++)
|
||
|
pMonitor->CommonSects[k]->refCount++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////
|
||
|
// For generic common sections
|
||
|
if (start == 0)
|
||
|
{
|
||
|
for (int i = 0; i < gCommonSections.GetSize(); i++)
|
||
|
{
|
||
|
LPCOMMON_SECTION pSection = gCommonSections.GetAt(i);
|
||
|
if (stricmp(pSection->sectName, "DPMS") == 0 ||
|
||
|
stricmp(pSection->sectName, "1600") == 0 ||
|
||
|
stricmp(pSection->sectName, "640") == 0 ||
|
||
|
stricmp(pSection->sectName, "800") == 0 ||
|
||
|
stricmp(pSection->sectName, "1024") == 0 ||
|
||
|
stricmp(pSection->sectName, "1280") == 0)
|
||
|
pSection->refCount++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < gCommonSections.GetSize(); i++)
|
||
|
{
|
||
|
LPCOMMON_SECTION pSection = gCommonSections.GetAt(i);
|
||
|
if (pSection->refCount == 0)
|
||
|
continue;
|
||
|
fprintf(fp, "[%s]\n", pSection->sectName);
|
||
|
fprintf(fp, "%s\n\n", pSection->contents);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
VOID CSumInf::DumpAddRegSection(FILE *fp, CManufacturer *pManufacturer)
|
||
|
{
|
||
|
fprintf(fp, "; -------------- %s\n", pManufacturer->name);
|
||
|
for (int i = 0; i < pManufacturer->MonitorArray.GetSize(); i++)
|
||
|
{
|
||
|
CMonitor *pMonitor = (CMonitor*)pManufacturer->MonitorArray[i];
|
||
|
|
||
|
/////////////////////////////////////////////////////////////
|
||
|
// If this Monitor has duplicated section, ignore it
|
||
|
if (pMonitor->bDupInstSection)
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
ASSERT(lstrlen(pMonitor->AddRegSectionBuf) != 0);
|
||
|
fprintf(fp, "[%s]\n", pMonitor->AddRegSectionName);
|
||
|
fprintf(fp, "%s\n", pMonitor->AddRegSectionBuf);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
VOID CSumInf::DumpCommonStringSection(FILE *fp, int start, int end)
|
||
|
{
|
||
|
LPCOMMON_ALIAS pAlias;
|
||
|
|
||
|
for (int i = 0; i < gCommonAlias.GetSize(); i++)
|
||
|
{
|
||
|
pAlias = gCommonAlias.GetAt(i);
|
||
|
pAlias->refCount = 0;
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////
|
||
|
// Calculate RefCount
|
||
|
for (i = start; i < end; i++)
|
||
|
{
|
||
|
CManufacturer *pManufacturer = (CManufacturer*)m_ManufacturerArray[i];
|
||
|
pAlias = pManufacturer->pAlias;
|
||
|
ASSERT(pAlias != NULL);
|
||
|
pAlias->refCount++;
|
||
|
for (int j = 0; j < pManufacturer->MonitorArray.GetSize(); j++)
|
||
|
{
|
||
|
CMonitor *pMonitor = (CMonitor*)pManufacturer->MonitorArray[j];
|
||
|
pAlias = pMonitor->pAlias;
|
||
|
ASSERT(pAlias != NULL);
|
||
|
pAlias->refCount++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////
|
||
|
// Actual dump
|
||
|
for (i = start; i < end; i++)
|
||
|
{
|
||
|
CManufacturer *pManufacturer = (CManufacturer*)m_ManufacturerArray[i];
|
||
|
pAlias = pManufacturer->pAlias;
|
||
|
ASSERT(pAlias != NULL);
|
||
|
if (pAlias->refCount == 1)
|
||
|
{
|
||
|
fprintf(fp, "%s=%s\n", pAlias->lpAlias, pAlias->lpContents);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pAlias->refCount--;
|
||
|
}
|
||
|
}
|
||
|
fprintf(fp, "\n");
|
||
|
|
||
|
for (i = start; i < end; i++)
|
||
|
{
|
||
|
CManufacturer *pManufacturer = (CManufacturer*)m_ManufacturerArray[i];
|
||
|
for (int j = 0; j < pManufacturer->MonitorArray.GetSize(); j++)
|
||
|
{
|
||
|
CMonitor *pMonitor = (CMonitor*)pManufacturer->MonitorArray[j];
|
||
|
pAlias = pMonitor->pAlias;
|
||
|
ASSERT(pAlias != NULL);
|
||
|
if (pAlias->refCount == 1)
|
||
|
{
|
||
|
fprintf(fp, "%s=%s\n", pAlias->lpAlias, pAlias->lpContents);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
pAlias->refCount--;
|
||
|
}
|
||
|
}
|
||
|
fprintf(fp, "\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
VOID CSumInf::DumpCommonHeader(FILE *fp, int numInfs)
|
||
|
{
|
||
|
if (numInfs == 0)
|
||
|
{
|
||
|
fprintf(fp, "; This is a Setup information file for monitors\n");
|
||
|
fprintf(fp, "; supported in the Windows 2000 product.\n;\n");
|
||
|
fprintf(fp, "; Copyright (c) 2000-2001, Microsoft Corporation\n\n");
|
||
|
|
||
|
fprintf(fp, "[VERSION]\n");
|
||
|
fprintf(fp, "Signature=\"$CHICAGO$\"\n");
|
||
|
fprintf(fp, "Class=Monitor\n");
|
||
|
fprintf(fp, "ClassGUID={4d36e96e-e325-11ce-bfc1-08002be10318}\n");
|
||
|
fprintf(fp, "Provider=%%MS%%\n");
|
||
|
fprintf(fp, "DriverVer=11/01/2000\n\n\n");
|
||
|
|
||
|
fprintf(fp, ";-------------------------------------------------\n");
|
||
|
fprintf(fp, "; Manufacturers\n\n");
|
||
|
fprintf(fp, "[Manufacturer]\n");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
fprintf(fp, "; This is Setup information file for monitors \n");
|
||
|
fprintf(fp, ";\n");
|
||
|
fprintf(fp, "; Copyright (c) 2000-2001, Microsoft Corporation\n\n");
|
||
|
|
||
|
fprintf(fp, "[version]\n");
|
||
|
fprintf(fp, "LayoutFile=layout.inf, layout1.inf\n");
|
||
|
fprintf(fp, "signature=\"$CHICAGO$\"\n");
|
||
|
fprintf(fp, "Class=Monitor\n");
|
||
|
fprintf(fp, "ClassGUID={4d36e96e-e325-11ce-bfc1-08002be10318}\n");
|
||
|
fprintf(fp, "Provider=%%MS%%\n");
|
||
|
fprintf(fp, "SetupClass=BASE\n");
|
||
|
fprintf(fp, "DriverVer=11/01/2000\n\n");
|
||
|
|
||
|
fprintf(fp, "[DestinationDirs]\n");
|
||
|
fprintf(fp, "DefaultDestDir = 11 ; LDID_SYS\n");
|
||
|
fprintf(fp, "monitor.infs.copy = 17 ; LDID_INF\n\n\n");
|
||
|
|
||
|
fprintf(fp, "; Base Install Sections\n");
|
||
|
fprintf(fp, ";-------------------------------------------------\n");
|
||
|
fprintf(fp, "[BaseWinOptions]\n");
|
||
|
fprintf(fp, "MonitorBase\n\n");
|
||
|
|
||
|
fprintf(fp, "[MonitorBase]\n");
|
||
|
fprintf(fp, "CopyFiles=monitor.infs.copy\n");
|
||
|
|
||
|
fprintf(fp, "[monitor.infs.copy]\n");
|
||
|
fprintf(fp, "monitor.inf\n");
|
||
|
for (int i = 1; i < numInfs; i++)
|
||
|
{
|
||
|
fprintf(fp, "monitor%d.inf\n", i+1);
|
||
|
}
|
||
|
|
||
|
fprintf(fp, "\n[SysCfgClasses]\n");
|
||
|
fprintf(fp, "Monitor, %%Unknown.DeviceDesc%%,MONITOR,4,%%MonitorClassName%% ; Default to \"Unknown Monitor\"\n\n\n");
|
||
|
|
||
|
fprintf(fp, "; Install class \"Monitor\"\n");
|
||
|
fprintf(fp, ";-------------------------------------------------\n");
|
||
|
fprintf(fp, "[ClassInstall]\n");
|
||
|
fprintf(fp, "AddReg=ClassAddReg\n");
|
||
|
|
||
|
fprintf(fp, "[ClassAddReg]\n");
|
||
|
fprintf(fp, "HKR,,,,%%MonitorClassName%%\n");
|
||
|
fprintf(fp, "HKR,,Installer,,\"SetupX.Dll, Monitor_ClassInstaller\"\n");
|
||
|
fprintf(fp, "HKR,,Icon,,\"-1\"\n\n");
|
||
|
|
||
|
fprintf(fp, "[ClassDelReg]\n\n\n");
|
||
|
|
||
|
fprintf(fp, "[ClassInstall32.NT]\n");
|
||
|
fprintf(fp, "AddReg=monitor_class_addreg\n");
|
||
|
|
||
|
fprintf(fp, "[monitor_class_addreg]\n");
|
||
|
fprintf(fp, "HKR,,,,%%MonitorClassName%%\n");
|
||
|
fprintf(fp, "HKR,,Installer32,,\"Desk.Cpl,MonitorClassInstaller\"\n");
|
||
|
fprintf(fp, "HKR,,Icon,,\"-1\"\n");
|
||
|
fprintf(fp, "HKR,,NoInstallClass,,\"1\"\n");
|
||
|
fprintf(fp, "HKR,,TroubleShooter-0,,\"hcp://help/tshoot/tsdisp.htm\"\n");
|
||
|
fprintf(fp, "HKR,,SilentInstall,,1\n\n");
|
||
|
|
||
|
fprintf(fp, "; Monitors to hide from pick list\n");
|
||
|
fprintf(fp, ";-------------------------------------------------\n");
|
||
|
fprintf(fp, "[ControlFlags]\n");
|
||
|
fprintf(fp, "ExcludeFromSelect=Monitor\\Default_Monitor\n\n");
|
||
|
|
||
|
fprintf(fp, ";-------------------------------------------------\n");
|
||
|
fprintf(fp, "; Manufacturers\n\n");
|
||
|
fprintf(fp, "[Manufacturer]\n");
|
||
|
fprintf(fp, "%%Generic%%=Generic\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|