/*++ Copyright (c) Microsoft Corporation. All rights reserved. Module Name: remboot.h Abstract: This file contains definitions related to remote install. Author: Adam Barr (adamba) 30-Dec-1997 Revision History: --*/ #ifndef _REMBOOT_H_ #define _REMBOOT_H_ #if defined(REMOTE_BOOT) // // Location of CSC and RBR directories. // #define REMOTE_BOOT_IMIRROR_PATH_W L"\\IntelliMirror Cache" #define REMOTE_BOOT_IMIRROR_PATH_A "\\IntelliMirror Cache" #define REMOTE_BOOT_CSC_SUBDIR_W L"\\CSC" // relative to IMIRROR_PATH #define REMOTE_BOOT_CSC_SUBDIR_A "\\CSC" // relative to IMIRROR_PATH #define REMOTE_BOOT_RBR_SUBDIR_W L"\\RBR" // relative to IMIRROR_PATH #define REMOTE_BOOT_RBR_SUBDIR_A "\\RBR" // relative to IMIRROR_PATH #endif // defined(REMOTE_BOOT) // // Directory under \RemoteInstall\Setup\ where we put // installation images. // #define REMOTE_INSTALL_SHARE_NAME_W L"REMINST" #define REMOTE_INSTALL_SHARE_NAME_A "REMINST" #define REMOTE_INSTALL_SETUP_DIR_W L"Setup" #define REMOTE_INSTALL_SETUP_DIR_A "Setup" #define REMOTE_INSTALL_IMAGE_DIR_W L"Images" #define REMOTE_INSTALL_IMAGE_DIR_A "Images" #define REMOTE_INSTALL_TOOLS_DIR_W L"Tools" #define REMOTE_INSTALL_TOOLS_DIR_A "Tools" #define REMOTE_INSTALL_TEMPLATES_DIR_W L"Templates" #define REMOTE_INSTALL_TEMPLATES_DIR_A "Templates" // // Size of the various components in a secret. // #define LM_OWF_PASSWORD_SIZE 16 #define NT_OWF_PASSWORD_SIZE 16 #define RI_SECRET_DOMAIN_SIZE 32 #define RI_SECRET_USER_SIZE 32 #define RI_SECRET_SID_SIZE 28 #if defined(REMOTE_BOOT) #define RI_SECRET_RESERVED_SIZE (64 + sizeof(ULONG)) #endif // defined(REMOTE_BOOT) // // The string that is stored in the signature. // #define RI_SECRET_SIGNATURE "NTRI" // // Structure that holds a secret. // typedef struct _RI_SECRET { UCHAR Signature[4]; ULONG Version; UCHAR Domain[RI_SECRET_DOMAIN_SIZE]; UCHAR User[RI_SECRET_USER_SIZE]; UCHAR LmEncryptedPassword1[LM_OWF_PASSWORD_SIZE]; UCHAR NtEncryptedPassword1[NT_OWF_PASSWORD_SIZE]; #if defined(REMOTE_BOOT) UCHAR LmEncryptedPassword2[LM_OWF_PASSWORD_SIZE]; UCHAR NtEncryptedPassword2[NT_OWF_PASSWORD_SIZE]; #endif // defined(REMOTE_BOOT) UCHAR Sid[RI_SECRET_SID_SIZE]; #if defined(REMOTE_BOOT) UCHAR Reserved[RI_SECRET_RESERVED_SIZE]; #endif // defined(REMOTE_BOOT) } RI_SECRET, *PRI_SECRET; // // FSCTLs the redir supports for accessing the secret. // #define IOCTL_RDR_BASE FILE_DEVICE_NETWORK_FILE_SYSTEM #define _RDR_CONTROL_CODE(request, method, access) \ CTL_CODE(IOCTL_RDR_BASE, request, method, access) #define FSCTL_LMMR_RI_INITIALIZE_SECRET _RDR_CONTROL_CODE(250, METHOD_BUFFERED, FILE_ANY_ACCESS) #if defined(REMOTE_BOOT) #define FSCTL_LMMR_RI_CHECK_FOR_NEW_PASSWORD _RDR_CONTROL_CODE(251, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_LMMR_RI_IS_PASSWORD_SETTABLE _RDR_CONTROL_CODE(252, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_LMMR_RI_SET_NEW_PASSWORD _RDR_CONTROL_CODE(253, METHOD_BUFFERED, FILE_ANY_ACCESS) #endif // defined(REMOTE_BOOT) //used in the remoteboot command console case #define IOCTL_LMMR_USEKERNELSEC _RDR_CONTROL_CODE(254, METHOD_BUFFERED, FILE_ANY_ACCESS) // // Structure used by these IOCTLs. // typedef struct _LMMR_RI_INITIALIZE_SECRET { RI_SECRET Secret; #if defined(REMOTE_BOOT) BOOLEAN UsePassword2; #endif // defined(REMOTE_BOOT) } LMMR_RI_INITIALIZE_SECRET, *PLMMR_RI_INITIALIZE_SECRET; #if defined(REMOTE_BOOT) typedef struct _LMMR_RI_CHECK_FOR_NEW_PASSWORD { ULONG Length; // in bytes UCHAR Data[1]; } LMMR_RI_CHECK_FOR_NEW_PASSWORD, *PLMMR_RI_CHECK_FOR_NEW_PASSWORD; typedef struct _LMMR_RI_SET_NEW_PASSWORD { ULONG Length1; // in bytes ULONG Length2; // in bytes -- 0 if no second password is provided UCHAR Data[1]; // if present, second password starts Length1 bytes in } LMMR_RI_SET_NEW_PASSWORD, *PLMMR_RI_SET_NEW_PASSWORD; #endif // defined(REMOTE_BOOT) // // The format of the IMirror.dat file that we write out // #define IMIRROR_DAT_FILE_NAME L"IMirror.dat" typedef struct _MIRROR_VOLUME_INFO_FILE { ULONG MirrorTableIndex; WCHAR DriveLetter; UCHAR PartitionType; BOOLEAN PartitionActive; BOOLEAN IsBootDisk; BOOLEAN CompressedVolume; ULONG MirrorUncLength; ULONG MirrorUncPathOffset; ULONG DiskNumber; ULONG PartitionNumber; ULONG DiskSignature; ULONG BlockSize; ULONG LastUSNMirrored; ULONG FileSystemFlags; WCHAR FileSystemName[16]; ULONG VolumeLabelLength; ULONG VolumeLabelOffset; ULONG NtNameLength; ULONG NtNameOffset; ULONG ArcNameLength; ULONG ArcNameOffset; LARGE_INTEGER DiskSpaceUsed; LARGE_INTEGER StartingOffset; LARGE_INTEGER PartitionSize; } MIRROR_VOLUME_INFO_FILE, *PMIRROR_VOLUME_INFO_FILE; #define IMIRROR_CURRENT_VERSION 2 typedef struct _MIRROR_CFG_INFO_FILE { ULONG MirrorVersion; ULONG FileLength; ULONG NumberVolumes; ULONG SystemPathLength; ULONG SystemPathOffset; BOOLEAN SysPrepImage; // if FALSE, means it's a mirror BOOLEAN Debug; ULONG MajorVersion; ULONG MinorVersion; ULONG BuildNumber; ULONG KernelFileVersionMS; ULONG KernelFileVersionLS; ULONG KernelFileFlags; ULONG CSDVersionLength; ULONG CSDVersionOffset; ULONG ProcessorArchitectureLength; ULONG ProcessorArchitectureOffset; ULONG CurrentTypeLength; ULONG CurrentTypeOffset; ULONG HalNameLength; ULONG HalNameOffset; MIRROR_VOLUME_INFO_FILE Volumes[1]; } MIRROR_CFG_INFO_FILE, *PMIRROR_CFG_INFO_FILE; // // The format of the alternate data stream on sysprep files containing // additional client disk info. // #define IMIRROR_ACL_STREAM_NAME L":$SYSPREP" #define IMIRROR_ACL_STREAM_VERSION 2 typedef struct _MIRROR_ACL_STREAM { ULONG StreamVersion; ULONG StreamLength; LARGE_INTEGER ChangeTime; ULONG ExtendedAttributes; ULONG SecurityDescriptorLength; // SecurityDescriptor of SecurityDescriptorLength } MIRROR_ACL_STREAM, *PMIRROR_ACL_STREAM; #define IMIRROR_SFN_STREAM_NAME L":$SYSPREPSFN" #define IMIRROR_SFN_STREAM_VERSION 1 typedef struct _MIRROR_SFN_STREAM { ULONG StreamVersion; ULONG StreamLength; // short file name of stream length; } MIRROR_SFN_STREAM, *PMIRROR_SFN_STREAM; // // Service Control Messages to BINLSVC // #define BINL_SERVICE_REREAD_SETTINGS 128 // // UI constants // // MAX_DIRECTORY_CHAR_COUNT theoretical limit is 68 for TFTP, but we keep // it lower here because certain buffers in the kernel, setupdd, etc., // are statically allocated too small. Rather than try to fix all these // buffers now, we are making the enforced limit lower. (40 should still // be plenty big!) After W2K, we can look at fixing the bad code. // #define REMOTE_INSTALL_MAX_DIRECTORY_CHAR_COUNT 40 #define REMOTE_INSTALL_MAX_DESCRIPTION_CHAR_COUNT 66 #define REMOTE_INSTALL_MAX_HELPTEXT_CHAR_COUNT 261 // // RISETUP has to call into BINLSVC to have it return the list of // files required by all the net card INFs in a given directory. Here's // the necessary stuff for this functionality. // // If you specify a non-zero value, we bail. // typedef ULONG (*PNETINF_CALLBACK)( PVOID Context, PWCHAR InfName, PWCHAR FileName ); typedef ULONG (*PNETINFENUMFILES)( PWCHAR FlatDirectory, // all the way to "i386" ULONG Architecture, // PROCESSOR_ARCHITECTURE_XXXXX PVOID Context, PNETINF_CALLBACK CallBack ); #define NETINFENUMFILESENTRYPOINT "NetInfEnumFiles" ULONG NetInfEnumFiles ( PWCHAR FlatDirectory, // all the way to "i386" ULONG Architecture, // PROCESSOR_ARCHITECTURE_XXXXX PVOID Context, PNETINF_CALLBACK CallBack ); #endif // _REMBOOT_H_