|
|
#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"); } }
|