mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
570 lines
10 KiB
570 lines
10 KiB
|
|
|
|
#ifndef _OPLIST_
|
|
#define _OPLIST_
|
|
|
|
#include "option.h"
|
|
#include "osetup.h"
|
|
#include "..\llist\llist.h"
|
|
|
|
//#include <objbase.h>
|
|
//#include <initguid.h>
|
|
|
|
//#include <devguid.h>
|
|
#include <setupapi.h>
|
|
#include <syssetup.h>
|
|
|
|
#undef ERROR_SECTION_NOT_FOUND
|
|
extern "C" {
|
|
#include "prsinf.h"
|
|
}
|
|
|
|
#define MAX_INF_ENTRY_LENGTH 100
|
|
|
|
|
|
|
|
|
|
|
|
typedef class OPTIONLISTC * POPTIONLISTC;
|
|
|
|
class OPTIONLISTC
|
|
{
|
|
protected:
|
|
|
|
LLIST OptionLlist;
|
|
HANDLE hInf;
|
|
CHAR path[_MAX_PATH];
|
|
CHAR SourcePath[_MAX_PATH];
|
|
WCHAR TypeString[200];//BUGBUG
|
|
|
|
|
|
|
|
VOID
|
|
OpenOemInf(
|
|
VOID);
|
|
|
|
VOID
|
|
GenerateInitalSourcePath(
|
|
VOID);
|
|
|
|
BOOL
|
|
InitOptionListWithAllOptions(
|
|
PCHAR pcInfOptions);
|
|
|
|
PCHAR
|
|
GetAllOptionsTextFromInfHandle(
|
|
VOID);
|
|
int
|
|
StrCpy(
|
|
PCHAR Dest,
|
|
PCHAR Source);
|
|
|
|
|
|
|
|
public:
|
|
|
|
PSCSIDEV_CREATEDEVICE_DATA ScsiDeviceData;
|
|
HWND hDlg;
|
|
|
|
OPTIONLISTC();
|
|
|
|
~OPTIONLISTC()
|
|
{Clear();};
|
|
|
|
|
|
VOID
|
|
SetDeviceInfo();
|
|
|
|
|
|
|
|
inline PCHAR
|
|
Path()
|
|
{ return(path);};
|
|
|
|
virtual
|
|
HANDLE
|
|
OpenOemInfFile(
|
|
VOID);
|
|
|
|
virtual
|
|
HANDLE
|
|
OpenOemInfFile(
|
|
PCHAR Path);
|
|
|
|
|
|
virtual VOID
|
|
CloseOemInfFile(
|
|
VOID)
|
|
{
|
|
CloseInfFile(hInf);
|
|
hInf = INVALID_HANDLE_VALUE;
|
|
};
|
|
|
|
virtual
|
|
BOOL
|
|
CopyOemSetupFile(
|
|
VOID);
|
|
virtual
|
|
BOOL
|
|
CompInfFiles(
|
|
PCHAR OtherInfFileName);
|
|
|
|
virtual
|
|
BOOL
|
|
CompInfInfos(
|
|
POPTIONLISTC OptionList2);
|
|
|
|
|
|
|
|
virtual POPTIONC
|
|
First(){return((POPTIONC)OptionLlist.First());};;
|
|
|
|
virtual POPTIONC
|
|
Next(){return((POPTIONC)OptionLlist.Next());};;
|
|
|
|
virtual POPTIONC
|
|
Enum(DWORD Num){return((POPTIONC)OptionLlist.Enum(Num));};;
|
|
|
|
virtual
|
|
VOID
|
|
Clear(VOID);
|
|
|
|
virtual BOOL
|
|
FindOptionOnOption(
|
|
POPTIONC aOption);
|
|
|
|
|
|
virtual BOOL
|
|
ExtractOptions(
|
|
VOID){return(OptionTypeSpecificExtract());};
|
|
|
|
virtual BOOL
|
|
ExtractOptions(
|
|
POPTIONC Option);
|
|
|
|
virtual BOOL
|
|
DelSelection(
|
|
VOID){return(TRUE);};
|
|
|
|
virtual BOOL
|
|
FindOption(
|
|
POPTIONC Option){return(FALSE);};
|
|
|
|
virtual POPTIONC
|
|
AllocInitOption(
|
|
PCHAR * InfOptions);
|
|
|
|
virtual VOID
|
|
InitOption(
|
|
POPTIONC Option,
|
|
PCHAR * InfOptions);
|
|
|
|
|
|
virtual BOOL
|
|
SelectDevice(
|
|
HWND hDlg,
|
|
PSCSIDEV_CREATEDEVICE_DATA DeviceData){return(FALSE);};
|
|
|
|
|
|
virtual BOOL
|
|
InstallSelectedDevice(
|
|
VOID){return(FALSE);};
|
|
|
|
virtual BOOL
|
|
DisplayOptionList(HWND hDlg){return(FALSE);};
|
|
|
|
virtual BOOL
|
|
OptionTypeSpecificExtract(
|
|
VOID);
|
|
|
|
virtual POPTIONLISTC
|
|
CloneList(VOID){ return(NULL); };
|
|
|
|
virtual POPTION_TYPE
|
|
Type(){return(NULL);};
|
|
|
|
|
|
//
|
|
//--- Get type stuff
|
|
//
|
|
virtual HICON
|
|
GetTypeIcon(VOID)
|
|
{return( (HICON) NULL);};
|
|
|
|
virtual WCHAR *
|
|
GetTypeString(VOID)
|
|
{return(NULL);};
|
|
|
|
virtual BOOL
|
|
RescanOnTapChange(VOID){return(FALSE);};
|
|
|
|
virtual BOOL
|
|
Init(VOID){return(FALSE);};
|
|
|
|
virtual DWORD
|
|
LastError(VOID){return(0);};
|
|
|
|
|
|
};
|
|
|
|
typedef struct DEVICE_CLASS_STRINGS_T
|
|
{
|
|
//
|
|
//--- Select drivers labels
|
|
//
|
|
int Title;
|
|
int Instructions;
|
|
int ListLabel;
|
|
|
|
} DEVICE_CLASS_STRINGS, * PDEVICE_CLASS_STRINGS;
|
|
|
|
|
|
|
|
typedef class OPTIONLIST_95C * POPTIONLIST_95C;
|
|
|
|
class OPTIONLIST_95C : public OPTIONLISTC
|
|
{
|
|
protected:
|
|
HDEVINFO hDriverInfo;
|
|
HDEVINFO hDevInfo;
|
|
DWORD err;
|
|
SCSIDEV_CREATEDEVICE_DATA NullDeviceData;
|
|
SP_DEVINFO_DATA SelectedDeviceInfoData;
|
|
|
|
|
|
|
|
VOID
|
|
RemoveInstalledDevicesFromDrvInfoList(
|
|
VOID);
|
|
|
|
VOID
|
|
GetDeviceProperty(
|
|
PSP_DEVINFO_DATA DeviceInfoDatam,
|
|
DWORD Property,
|
|
PBYTE PropertyData,
|
|
DWORD PropertyDataSize);
|
|
|
|
inline VOID
|
|
GetServiceProperty(
|
|
PSP_DEVINFO_DATA DeviceInfoData,
|
|
POPTIONC Option)
|
|
{
|
|
GetDeviceProperty(
|
|
DeviceInfoData,
|
|
SPDRP_SERVICE,
|
|
(PBYTE)Option->GetOption(),
|
|
MAX_OPTION_LENGTH);
|
|
|
|
Option->SetDriverName(Option->GetOption());
|
|
};
|
|
|
|
inline VOID
|
|
GetDeviceNameProperty(
|
|
PSP_DEVINFO_DATA DeviceInfoData,
|
|
POPTIONC Option)
|
|
{
|
|
GetDeviceProperty(
|
|
DeviceInfoData,
|
|
SPDRP_DEVICEDESC,
|
|
(PBYTE)Option->GetOptionName(),
|
|
MAX_OPTION_DISPLAY_STRING_LENGTH);
|
|
|
|
};
|
|
|
|
inline VOID
|
|
GetDeviceMfgProperty(
|
|
PSP_DEVINFO_DATA DeviceInfoData,
|
|
POPTIONC Option)
|
|
{
|
|
GetDeviceProperty(
|
|
DeviceInfoData,
|
|
SPDRP_MFG,
|
|
(PBYTE)Option->GetMfgName(),
|
|
MAX_OPTION_DISPLAY_STRING_LENGTH);
|
|
};
|
|
|
|
BOOL
|
|
NeedReboot(
|
|
VOID);
|
|
|
|
|
|
BOOL
|
|
PromptRebootOnRebootFlag(
|
|
PSP_DEVINFO_DATA DeviceInfoData);
|
|
|
|
|
|
VOID
|
|
SetSelectDevParams(
|
|
PDEVICE_CLASS_STRINGS ClassStrings,
|
|
PSCSIDEV_CREATEDEVICE_DATA DeviceData);
|
|
|
|
virtual LPGUID
|
|
Get_DevClass_Guid(
|
|
VOID){return(NULL);};
|
|
|
|
virtual DWORD
|
|
GetCreateDeviceType(
|
|
VOID){ return(0);};
|
|
|
|
|
|
|
|
virtual PDEVICE_CLASS_STRINGS
|
|
GetClassStrings(
|
|
VOID){return(NULL);};
|
|
|
|
virtual WCHAR* UniTypeString(VOID)
|
|
{return(NULL);};
|
|
|
|
|
|
public:
|
|
|
|
OPTIONLIST_95C();
|
|
~OPTIONLIST_95C();
|
|
|
|
BOOL
|
|
BuildOptionList(
|
|
VOID);
|
|
|
|
VOID
|
|
BuildOptionListExt(
|
|
HWND hDlg,
|
|
BOOL Thread);
|
|
|
|
BOOL
|
|
SelectDevice(
|
|
HWND hDlg,
|
|
PSCSIDEV_CREATEDEVICE_DATA DeviceData);
|
|
|
|
BOOL
|
|
DelSelection(
|
|
VOID);
|
|
|
|
BOOL
|
|
InstallSelectedDevice(
|
|
VOID);
|
|
|
|
|
|
|
|
BOOL
|
|
DisplayOptionList(
|
|
HWND hDlg);
|
|
|
|
BOOL
|
|
ExtractOptions(
|
|
VOID);
|
|
|
|
BOOL
|
|
ExtractOptions(
|
|
POPTIONC Option);
|
|
|
|
BOOL
|
|
Init(
|
|
VOID)
|
|
{
|
|
return((hDevInfo!=INVALID_HANDLE_VALUE)?TRUE:FALSE);
|
|
};
|
|
|
|
DWORD
|
|
LastError(VOID){return(err);};
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
//
|
|
// --- Tape device class for 95 setup
|
|
//
|
|
typedef class TAPE_95C * PTAPE_95C;
|
|
|
|
class TAPE_95C : public OPTIONLIST_95C
|
|
{
|
|
private:
|
|
DEVICE_CLASS_STRINGS ClassStrings;
|
|
|
|
LPGUID
|
|
Get_DevClass_Guid(
|
|
VOID);
|
|
|
|
|
|
inline DWORD
|
|
GetCreateDeviceType(
|
|
VOID){ return(TAPEDIF_CREATEDEVICE);};
|
|
|
|
|
|
PDEVICE_CLASS_STRINGS
|
|
GetClassStrings(
|
|
VOID)
|
|
{
|
|
ClassStrings.Title = IDS_InstallDriver;
|
|
ClassStrings.Instructions = IDS_INSTALL_INSTRACT;
|
|
ClassStrings.ListLabel = IDS_TAPE;
|
|
return(& ClassStrings);
|
|
};
|
|
|
|
WCHAR*
|
|
UniTypeString(VOID)
|
|
{return(L"TapeDrive");};
|
|
|
|
//
|
|
//--- For tape a driver can have been installed on
|
|
//--- the fron side threw detect. So if the driver tab
|
|
//--- gets active I need to reget the driver list
|
|
//
|
|
BOOL
|
|
RescanOnTapChange(VOID)
|
|
{return(TRUE);};
|
|
|
|
|
|
|
|
public:
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef class TAPE_OPTIONLISTC * PTAPE_OPTIONLISTC;
|
|
|
|
class TAPE_OPTIONLISTC : public TAPE_95C
|
|
{
|
|
private:
|
|
public:
|
|
//TAPE_OPTIONLISTC();
|
|
//~TAPE_OPTIONLISTC();
|
|
|
|
POPTION_TYPE
|
|
Type(){return(&OPTION_TYPE_TAPE);};
|
|
|
|
POPTIONLISTC
|
|
CloneList(VOID){ return(new TAPE_OPTIONLISTC); };
|
|
|
|
|
|
//
|
|
//--- Get type stuff
|
|
//
|
|
HICON
|
|
GetTypeIcon(VOID)
|
|
{return(LoadIcon(hinst,
|
|
MAKEINTRESOURCE(OPTION_TYPE_TAPE.TypeIcon)));};
|
|
|
|
WCHAR *
|
|
GetTypeString(VOID)
|
|
{
|
|
if(*TypeString == '\0')
|
|
{
|
|
LoadString(hinst,OPTION_TYPE_TAPE.TypeString,
|
|
TypeString,200);
|
|
}
|
|
return(TypeString);
|
|
};
|
|
|
|
};
|
|
|
|
typedef class NET_OPTIONLISTC * PNET_OPTIONLISTC;
|
|
|
|
class NET_OPTIONLISTC : public OPTIONLISTC
|
|
{
|
|
private:
|
|
|
|
public:
|
|
//NET_OPTIONLISTC();
|
|
//~NET_OPTIONLISTC();
|
|
|
|
POPTION_TYPE
|
|
Type(){return(&OPTION_TYPE_NET);};
|
|
|
|
|
|
BOOL
|
|
OptionTypeSpecificExtract(
|
|
VOID){return(0);};
|
|
|
|
POPTIONLISTC
|
|
CloneList(VOID){ return(new NET_OPTIONLISTC); };
|
|
|
|
};
|
|
|
|
|
|
//
|
|
// --- SCSI device class for 95 setup
|
|
//
|
|
typedef class SCSI_95C * PSCSI_95C;
|
|
|
|
class SCSI_95C : public OPTIONLIST_95C
|
|
{
|
|
private:
|
|
DEVICE_CLASS_STRINGS ClassStrings;
|
|
|
|
LPGUID
|
|
Get_DevClass_Guid(
|
|
VOID);
|
|
|
|
inline DWORD
|
|
GetCreateDeviceType(
|
|
VOID){ return(SCSIDIF_CREATEDEVICE);};
|
|
|
|
|
|
|
|
PDEVICE_CLASS_STRINGS
|
|
GetClassStrings(
|
|
VOID)
|
|
{
|
|
ClassStrings.Title = IDS_InstallDriver;
|
|
ClassStrings.Instructions = IDS_INSTALL_INSTRACT;
|
|
ClassStrings.ListLabel = IDS_ScsiAdapter;
|
|
return(& ClassStrings);
|
|
};
|
|
|
|
WCHAR*
|
|
UniTypeString(VOID){return(L"SCSIAdapter");};
|
|
|
|
|
|
public:
|
|
|
|
BOOL
|
|
ExtractOptions(
|
|
POPTIONC Option);
|
|
|
|
};
|
|
|
|
|
|
typedef class SCSI_OPTIONLISTC * PSCSI_OPTIONLISTC;
|
|
|
|
class SCSI_OPTIONLISTC : public SCSI_95C
|
|
{
|
|
private:
|
|
public:
|
|
//SCSI_OPTIONLISTC();
|
|
//~SCSI_OPTIONLISTC();
|
|
|
|
POPTION_TYPE
|
|
Type(){return(&OPTION_TYPE_SCSI);};
|
|
|
|
POPTIONLISTC
|
|
CloneList(VOID){ return(new SCSI_OPTIONLISTC); };
|
|
|
|
//
|
|
//--- Get type stuff
|
|
//
|
|
HICON
|
|
GetTypeIcon(VOID)
|
|
{return(LoadIcon(hinst,
|
|
MAKEINTRESOURCE(OPTION_TYPE_SCSI.TypeIcon)));};
|
|
|
|
WCHAR *
|
|
GetTypeString(VOID)
|
|
{
|
|
if(*TypeString == '\0')
|
|
{
|
|
LoadString(hinst,OPTION_TYPE_SCSI.TypeString,
|
|
TypeString,200);
|
|
}
|
|
return(TypeString);
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|