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.
230 lines
5.1 KiB
230 lines
5.1 KiB
|
|
//
|
|
// Headless communication constants and structures.
|
|
//
|
|
#define VTUTF8_CLEAR_SCREEN L"\033[2J\033[0;0H"
|
|
#define MY_MAX_STRING_LENGTH (256)
|
|
|
|
typedef struct _UserInputParams {
|
|
EMSVTUTF8Channel* Channel; // headless channel object
|
|
HANDLE hInputCompleteEvent; //signals that the user is done.
|
|
HANDLE hRemoveUI; //signals that we should abort.
|
|
} UserInputParams, *PUserInputParams;
|
|
|
|
|
|
|
|
|
|
typedef BOOL ( STDAPICALLTYPE *SETUPPIDGENW )(
|
|
LPWSTR lpstrSecureCdKey, // [IN] 25-character Secure CD-Key (gets U-Cased)
|
|
LPCWSTR lpstrMpc, // [IN] 5-character Microsoft Product Code
|
|
LPCWSTR lpstrSku, // [IN] Stock Keeping Unit (formatted like 123-12345)
|
|
BOOL fOem, // [IN] is this an OEM install?
|
|
LPWSTR lpstrPid2, // [OUT] PID 2.0, pass in ptr to 24 character array
|
|
LPBYTE lpbDigPid, // [IN/OUT] pointer to DigitalPID buffer. First DWORD is the length
|
|
LPBOOL pfCCP); // [OUT] optional ptr to Compliance Checking flag (can be NULL)
|
|
|
|
|
|
DEFINE_GUID(
|
|
SAC_CHANNEL_GUI_SETUP_PROMPT, /* 77320899-e37c-41bc-8cbc-840920e12b60 */
|
|
0x77320899,0xe37c,0x41bc,0x8c, 0xbc, 0x84, 0x09, 0x20, 0xe1, 0x2b, 0x60);
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
// PID presentation constants.
|
|
//
|
|
#define MAX_PID30_SITE (3)
|
|
#define MAX_PID30_RPC (5)
|
|
#define SETUP_TYPE_BUFFER_LEN (8)
|
|
|
|
|
|
//
|
|
// EULA presentation constants.
|
|
//
|
|
#define EULA_LINES_PER_SCREEN (15)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
// EMS communication function prototypes.
|
|
//
|
|
|
|
BOOL
|
|
IsHeadlessPresent(
|
|
OUT EMSVTUTF8Channel **Channel
|
|
);
|
|
|
|
BOOL
|
|
InitializeGlobalChannelAttributes(
|
|
PSAC_CHANNEL_OPEN_ATTRIBUTES ChannelAttributes
|
|
);
|
|
|
|
BOOL
|
|
WaitForUserInputFromEMS(
|
|
IN DWORD TimeOut,
|
|
OUT BOOL *TimedOut, OPTIONAL
|
|
IN HANDLE hCancelEvent OPTIONAL
|
|
);
|
|
|
|
BOOL
|
|
ReadCharFromEMS(
|
|
OUT PWCHAR awc,
|
|
IN HANDLE hCancelEvent OPTIONAL
|
|
);
|
|
|
|
BOOL
|
|
GetStringFromEMS(
|
|
OUT PWSTR String,
|
|
IN ULONG BufferSize,
|
|
IN BOOL GetAllChars,
|
|
IN BOOL EchoClearText,
|
|
IN HANDLE hCancelEvent OPTIONAL
|
|
);
|
|
|
|
VOID
|
|
ClearEMSScreen();
|
|
|
|
BOOL
|
|
GetDecodedKeyPressFromEMS(
|
|
OUT PULONG KeyPress,
|
|
IN HANDLE hCancelEvent OPTIONAL
|
|
);
|
|
|
|
#define ASCI_ETX 3 // control-C
|
|
#define ASCI_BS 8
|
|
#define ASCI_NL 10
|
|
#define ASCI_C 67
|
|
#define ASCI_LOWER_C 99
|
|
#define ASCI_CR 13
|
|
#define ASCI_ESC 27
|
|
|
|
//
|
|
// Character codes are passed around as ULONGs within setup.
|
|
// The low word is a Unicode character value; the high word
|
|
// is used for various other keypresses.
|
|
//
|
|
#define KEY_PAGEUP 0x00010000
|
|
#define KEY_PAGEDOWN 0x00020000
|
|
#define KEY_UP 0x00030000
|
|
#define KEY_DOWN 0x00040000
|
|
#define KEY_LEFT 0x00050000
|
|
#define KEY_RIGHT 0x00060000
|
|
#define KEY_HOME 0x00070000
|
|
#define KEY_END 0x00080000
|
|
#define KEY_INSERT 0x00090000
|
|
#define KEY_DELETE 0x000a0000
|
|
#define KEY_F1 0x00110000
|
|
#define KEY_F2 0x00120000
|
|
#define KEY_F3 0x00130000
|
|
#define KEY_F4 0x00140000
|
|
#define KEY_F5 0x00150000
|
|
#define KEY_F6 0x00160000
|
|
#define KEY_F7 0x00170000
|
|
#define KEY_F8 0x00180000
|
|
#define KEY_F9 0x00190000
|
|
#define KEY_F10 0x001a0000
|
|
#define KEY_F11 0x001b0000
|
|
#define KEY_F12 0x001c0000
|
|
//
|
|
// PID function prototypes.
|
|
//
|
|
BOOL
|
|
InitializePidVariables(
|
|
);
|
|
|
|
BOOL
|
|
ValidatePidEx(
|
|
LPTSTR PID,
|
|
BOOL *pbStepup,
|
|
BOOL *bSelect
|
|
);
|
|
|
|
BOOL
|
|
ValidatePid30(
|
|
LPTSTR aPID
|
|
);
|
|
|
|
BOOL
|
|
ValidatePid30Assemble(
|
|
LPTSTR Edit1,
|
|
LPTSTR Edit2,
|
|
LPTSTR Edit3,
|
|
LPTSTR Edit4,
|
|
LPTSTR Edit5
|
|
);
|
|
|
|
BOOL
|
|
GetPid(
|
|
IN PWSTR PidString,
|
|
IN ULONG BufferSize,
|
|
IN HANDLE hCancelEvent
|
|
);
|
|
|
|
//
|
|
// EULA function prototypes
|
|
//
|
|
BOOL
|
|
PresentEula(
|
|
HANDLE hCancelEvent
|
|
);
|
|
|
|
//
|
|
// Core Functionality
|
|
//
|
|
|
|
INT_PTR CALLBACK
|
|
UserInputAbortProc(
|
|
HWND hwndDlg, // handle to dialog box
|
|
UINT uMsg, // message
|
|
WPARAM wParam, // first message parameter
|
|
LPARAM lParam // second message parameter
|
|
);
|
|
|
|
DWORD
|
|
PromptForUserInputThreadOverHeadlessConnection(
|
|
PVOID params
|
|
);
|
|
|
|
DWORD
|
|
PromptForUserInputThreadViaLocalDialog(
|
|
PVOID params
|
|
);
|
|
|
|
BOOL
|
|
LoadStringResource(
|
|
PUNICODE_STRING pUnicodeString,
|
|
INT MsgId
|
|
);
|
|
|
|
BOOL
|
|
WriteResourceMessage(
|
|
ULONG MessageID
|
|
);
|
|
|
|
BOOL
|
|
PromptForPassword(
|
|
IN PWSTR Password,
|
|
IN ULONG BufferSize,
|
|
IN HANDLE hCancelEvent
|
|
);
|
|
|
|
DWORD
|
|
ProcessUnattendFile(
|
|
BOOL FixUnattendFile,
|
|
PBOOL ProcessingRequired, OPTIONAL
|
|
PHANDLE hCancelEvent OPTIONAL
|
|
);
|
|
|
|
extern "C"
|
|
BOOL
|
|
CheckEMS(
|
|
IN int argc,
|
|
WCHAR *argvW[]
|
|
);
|
|
|
|
|