📄 setupapi.pas
字号:
{$EXTERNALSYM DIRID_COMMON_DOCUMENTS}
//
// First user-definable dirid. See SetupSetDirectoryId().
//
DIRID_USER = $8000;
{$EXTERNALSYM DIRID_USER}
//
// Setup callback notification routine type
//
type
TSPFileCallbackA = function(Context: Pointer; Notification: UINT;
Param1, Param2: UINT_PTR): UINT; stdcall;
TSPFileCallbackW = function(Context: Pointer; Notification: UINT;
Param1, Param2: UINT_PTR): UINT; stdcall;
{$IFDEF UNICODE}
TSPFileCallback = TSPFileCallbackW;
{$ELSE}
TSPFileCallback = TSPFileCallbackA;
{$ENDIF UNICODE}
//
// Operation/queue start/end notification. These are ordinal values.
//
const
SPFILENOTIFY_STARTQUEUE = $00000001;
{$EXTERNALSYM SPFILENOTIFY_STARTQUEUE}
SPFILENOTIFY_ENDQUEUE = $00000002;
{$EXTERNALSYM SPFILENOTIFY_ENDQUEUE}
SPFILENOTIFY_STARTSUBQUEUE = $00000003;
{$EXTERNALSYM SPFILENOTIFY_STARTSUBQUEUE}
SPFILENOTIFY_ENDSUBQUEUE = $00000004;
{$EXTERNALSYM SPFILENOTIFY_ENDSUBQUEUE}
SPFILENOTIFY_STARTDELETE = $00000005;
{$EXTERNALSYM SPFILENOTIFY_STARTDELETE}
SPFILENOTIFY_ENDDELETE = $00000006;
{$EXTERNALSYM SPFILENOTIFY_ENDDELETE}
SPFILENOTIFY_DELETEERROR = $00000007;
{$EXTERNALSYM SPFILENOTIFY_DELETEERROR}
SPFILENOTIFY_STARTRENAME = $00000008;
{$EXTERNALSYM SPFILENOTIFY_STARTRENAME}
SPFILENOTIFY_ENDRENAME = $00000009;
{$EXTERNALSYM SPFILENOTIFY_ENDRENAME}
SPFILENOTIFY_RENAMEERROR = $0000000a;
{$EXTERNALSYM SPFILENOTIFY_RENAMEERROR}
SPFILENOTIFY_STARTCOPY = $0000000b;
{$EXTERNALSYM SPFILENOTIFY_STARTCOPY}
SPFILENOTIFY_ENDCOPY = $0000000c;
{$EXTERNALSYM SPFILENOTIFY_ENDCOPY}
SPFILENOTIFY_COPYERROR = $0000000d;
{$EXTERNALSYM SPFILENOTIFY_COPYERROR}
SPFILENOTIFY_NEEDMEDIA = $0000000e;
{$EXTERNALSYM SPFILENOTIFY_NEEDMEDIA}
SPFILENOTIFY_QUEUESCAN = $0000000f;
{$EXTERNALSYM SPFILENOTIFY_QUEUESCAN}
//
// These are used with SetupIterateCabinet().
//
SPFILENOTIFY_CABINETINFO = $00000010;
{$EXTERNALSYM SPFILENOTIFY_CABINETINFO}
SPFILENOTIFY_FILEINCABINET = $00000011;
{$EXTERNALSYM SPFILENOTIFY_FILEINCABINET}
SPFILENOTIFY_NEEDNEWCABINET = $00000012;
{$EXTERNALSYM SPFILENOTIFY_NEEDNEWCABINET}
SPFILENOTIFY_FILEEXTRACTED = $00000013;
{$EXTERNALSYM SPFILENOTIFY_FILEEXTRACTED}
SPFILENOTIFY_FILEOPDELAYED = $00000014;
{$EXTERNALSYM SPFILENOTIFY_FILEOPDELAYED}
//
// These are used for backup operations
//
SPFILENOTIFY_STARTBACKUP = $00000015;
{$EXTERNALSYM SPFILENOTIFY_STARTBACKUP}
SPFILENOTIFY_BACKUPERROR = $00000016;
{$EXTERNALSYM SPFILENOTIFY_BACKUPERROR}
SPFILENOTIFY_ENDBACKUP = $00000017;
{$EXTERNALSYM SPFILENOTIFY_ENDBACKUP}
//
// Extended notification for SetupScanFileQueue(Flags=SPQ_SCAN_USE_CALLBACKEX)
//
SPFILENOTIFY_QUEUESCAN_EX = $00000018;
{$EXTERNALSYM SPFILENOTIFY_QUEUESCAN_EX}
SPFILENOTIFY_STARTREGISTRATION = $00000019;
SPFILENOTIFY_ENDREGISTRATION = $00000020;
//
// Extended notification for SetupScanFileQueue(Flags=SPQ_SCAN_USE_CALLBACK_SIGNERINFO)
//
SPFILENOTIFY_QUEUESCAN_SIGNERINFO = $00000040;
//
// Copy notification. These are bit flags that may be combined.
//
SPFILENOTIFY_LANGMISMATCH = $00010000;
{$EXTERNALSYM SPFILENOTIFY_LANGMISMATCH}
SPFILENOTIFY_TARGETEXISTS = $00020000;
{$EXTERNALSYM SPFILENOTIFY_TARGETEXISTS}
SPFILENOTIFY_TARGETNEWER = $00040000;
{$EXTERNALSYM SPFILENOTIFY_TARGETNEWER}
//
// File operation codes and callback outcomes.
//
FILEOP_COPY = 0;
{$EXTERNALSYM FILEOP_COPY}
FILEOP_RENAME = 1;
{$EXTERNALSYM FILEOP_RENAME}
FILEOP_DELETE = 2;
{$EXTERNALSYM FILEOP_DELETE}
FILEOP_BACKUP = 3;
{$EXTERNALSYM FILEOP_BACKUP}
FILEOP_ABORT = 0;
{$EXTERNALSYM FILEOP_ABORT}
FILEOP_DOIT = 1;
{$EXTERNALSYM FILEOP_DOIT}
FILEOP_SKIP = 2;
{$EXTERNALSYM FILEOP_SKIP}
FILEOP_RETRY = FILEOP_DOIT;
{$EXTERNALSYM FILEOP_RETRY}
FILEOP_NEWPATH = 4;
{$EXTERNALSYM FILEOP_NEWPATH}
//
// Flags in inf copy sections
//
COPYFLG_WARN_IF_SKIP = $00000001; // warn if user tries to skip file
{$EXTERNALSYM COPYFLG_WARN_IF_SKIP}
COPYFLG_NOSKIP = $00000002; // disallow skipping this file
{$EXTERNALSYM COPYFLG_NOSKIP}
COPYFLG_NOVERSIONCHECK = $00000004; // ignore versions and overwrite target
{$EXTERNALSYM COPYFLG_NOVERSIONCHECK}
COPYFLG_FORCE_FILE_IN_USE = $00000008; // force file-in-use behavior
{$EXTERNALSYM COPYFLG_FORCE_FILE_IN_USE}
COPYFLG_NO_OVERWRITE = $00000010; // do not copy if file exists on target
{$EXTERNALSYM COPYFLG_NO_OVERWRITE}
COPYFLG_NO_VERSION_DIALOG = $00000020; // do not copy if target is newer
{$EXTERNALSYM COPYFLG_NO_VERSION_DIALOG}
COPYFLG_OVERWRITE_OLDER_ONLY = $00000040; // leave target alone if version same as source
{$EXTERNALSYM COPYFLG_OVERWRITE_OLDER_ONLY}
COPYFLG_REPLACEONLY = $00000400; // copy only if file exists on target
{$EXTERNALSYM COPYFLG_REPLACEONLY}
COPYFLG_NODECOMP = $00000800; // don't attempt to decompress file; copy as-is
{$EXTERNALSYM COPYFLG_NODECOMP}
COPYFLG_REPLACE_BOOT_FILE = $00001000; // file must be present upon reboot (i.e., it's
{$EXTERNALSYM COPYFLG_REPLACE_BOOT_FILE} // needed by the loader); this flag implies a reboot
COPYFLG_NOPRUNE = $00002000; // never prune this file
{$EXTERNALSYM COPYFLG_NOPRUNE}
//
// Flags in inf delete sections
// New flags go in high word
//
DELFLG_IN_USE = $00000001; // queue in-use file for delete
{$EXTERNALSYM DELFLG_IN_USE}
DELFLG_IN_USE1 = $00010000; // high-word version of DELFLG_IN_USE
{$EXTERNALSYM DELFLG_IN_USE1}
//
// Source and file paths. Used when notifying queue callback
// of SPFILENOTIFY_STARTxxx, SPFILENOTIFY_ENDxxx, and SPFILENOTIFY_xxxERROR.
//
type
PFilePathsA = ^TFilePathsA;
PFilePathsW = ^TFilePathsW;
FILEPATHS_A = packed record
Target: PAnsiChar;
Source: PAnsiChar; // not used for delete operations
Win32Error: UINT;
Flags: DWORD; // such as SP_COPY_NOSKIP for copy errors
end;
{$EXTERNALSYM FILEPATHS_A}
FILEPATHS_W = packed record
Target: PWideChar;
Source: PWideChar; // not used for delete operations
Win32Error: UINT;
Flags: DWORD; // such as SP_COPY_NOSKIP for copy errors
end;
{$EXTERNALSYM FILEPATHS_W}
TFilePathsA = FILEPATHS_A;
TFilePathsW = FILEPATHS_W;
{$IFDEF UNICODE}
TFilePaths = TFilePathsW;
PFilePaths = PFilePathsW;
{$ELSE}
TFilePaths = TFilePathsA;
PFilePaths = PFilePathsA;
{$ENDIF UNICODE}
{$IFDEF WINXP_UP}
PFilePathsSignerInfoA = ^TFilePathsSignerInfoA;
PFilePathsSignerInfoW = ^TFilePathsSignerInfoW;
FILEPATHS_SIGNERINFO_A = packed record
Target: PAnsiChar;
Source: PAnsiChar; // not used for delete operations
Win32Error: UINT;
Flags: DWORD; // such as SP_COPY_NOSKIP for copy errors
DigitalSigner: PAnsiChar;
Version: PAnsiChar;
CatalogFile: PAnsiChar;
end;
{$EXTERNALSYM FILEPATHS_SIGNERINFO_A}
FILEPATHS_SIGNERINFO_W = packed record
Target: PWideChar;
Source: PWideChar; // not used for delete operations
Win32Error: UINT;
Flags: DWORD; // such as SP_COPY_NOSKIP for copy errors
DigitalSigner: PWideChar;
Version: PWideChar;
CatalogFile: PWideChar;
end;
{$EXTERNALSYM FILEPATHS_SIGNERINFO_W}
TFilePathsSignerInfoA = FILEPATHS_SIGNERINFO_A;
TFilePathsSignerInfoW = FILEPATHS_SIGNERINFO_W;
{$IFDEF UNICODE}
TFilePathsSignerInfo = TFilePathsSignerInfoA;
PFilePathsSignerInfo = PFilePathsSignerInfoW;
{$ELSE}
TFilePathsSignerInfo = TFilePathsSignerInfoA;
PFilePathsSignerInfo = PFilePathsSignerInfoA;
{$ENDIF UNICODE}
{$ENDIF WINXP_UP}
//
// Structure used with SPFILENOTIFY_NEEDMEDIA
//
PSourceMediaA = ^TSourceMediaA;
PSourceMediaW = ^TSourceMediaW;
SOURCE_MEDIA_A = packed record
Reserved: PAnsiChar;
Tagfile: PAnsiChar; // may be NULL
Description: PAnsiChar;
//
// Pathname part and filename part of source file
// that caused us to need the media.
//
SourcePath: PAnsiChar;
SourceFile: PAnsiChar;
Flags: DWORD; // subset of SP_COPY_xxx
end;
{$EXTERNALSYM SOURCE_MEDIA_A}
SOURCE_MEDIA_W = packed record
Reserved: PWideChar;
Tagfile: PWideChar; // may be NULL
Description: PWideChar;
//
// Pathname part and filename part of source file
// that caused us to need the media.
//
SourcePath: PWideChar;
SourceFile: PWideChar;
Flags: DWORD; // subset of SP_COPY_xxx
end;
{$EXTERNALSYM SOURCE_MEDIA_W}
TSourceMediaA = SOURCE_MEDIA_A;
TSourceMediaW = SOURCE_MEDIA_W;
{$IFDEF UNICODE}
TSourceMedia = TSourceMediaW;
PSourceMedia = PSourceMediaW;
{$ELSE}
TSourceMedia = TSourceMediaA;
PSourceMedia = PSourceMediaA;
{$ENDIF UNICODE}
//
// Structure used with SPFILENOTIFY_CABINETINFO and
// SPFILENOTIFY_NEEDNEWCABINET
//
PCabinetInfoA = ^TCabinetInfoA;
PCabinetInfoW = ^TCabinetInfoW;
CABINET_INFO_A = packed record
CabinetPath: PAnsiChar;
CabinetFile: PAnsiChar;
DiskName: PAnsiChar;
SetId: Word;
CabinetNumber: Word;
end;
{$EXTERNALSYM CABINET_INFO_A}
CABINET_INFO_W = packed record
CabinetPath: PWideChar;
CabinetFile: PWideChar;
DiskName: PWideChar;
SetId: Word;
CabinetNumber: Word;
end;
{$EXTERNALSYM CABINET_INFO_W}
TCabinetInfoA = CABINET_INFO_A;
TCabinetInfoW = CABINET_INFO_W;
{$IFDEF UNICODE}
TCabinetInfo = TCabinetInfoW;
PCabinetInfo = PCabinetInfoW;
{$ELSE}
TCabinetInfo = TCabinetInfoA;
PCabinetInfo = PCabinetInfoA;
{$ENDIF UNICODE}
//
// Structure used with SPFILENOTIFY_FILEINCABINET
//
PFileInCabinetInfoA = ^TFileInCabinetInfoA;
PFileInCabinetInfoW = ^TFileInCabinetInfoW;
FILE_IN_CABINET_INFO_A = packed record
NameInCabinet: PAnsiChar;
FileSize: DWORD;
Win32Error: DWORD;
DosDate: Word;
DosTime: Word;
DosAttribs: Word;
FullTargetName: array [0..MAX_PATH - 1] of AnsiChar;
end;
{$EXTERNALSYM FILE_IN_CABINET_INFO_A}
FILE_IN_CABINET_INFO_W = packed record
NameInCabinet: PWideChar;
FileSize: DWORD;
Win32Error: DWORD;
DosDate: Word;
DosTime: Word;
DosAttribs: Word;
FullTargetName: array [0..MAX_PATH - 1] of WideChar;
end;
{$EXTERNALSYM FILE_IN_CABINET_INFO_W}
TFileInCabinetInfoA = FILE_IN_CABINET_INFO_A;
TFileInCabinetInfoW = FILE_IN_CABINET_INFO_W;
{$IFDEF UNICODE}
TFileInCabinetInfo = TFileInCabinetInfoW;
PFileInCabinetInfo = PFileInCabinetInfoW;
{$ELSE}
TFileInCabinetInfo = TFileInCabinetInfoA;
PFileInCabinetInfo = PFileInCabinetInfoA;
{$ENDIF UNICODE}
//
// Structure used for SPFILENOTIFY_***REGISTRATION
// callback
//
{$IFDEF WINXP_UP}
PSPRegisterControlStatusA = ^TSPRegisterControlStatusA;
PSPRegisterControlStatusW = ^TSPRegisterControlStatusW;
SP_REGISTER_CONTROL_STATUSA = packed record
cbSize: DWORD;
FileName: PAnsiChar;
Win32Error: DWORD;
FailureCode: DWORD;
end;
{$EXTERNALSYM SP_REGISTER_CONTROL_STATUSA}
SP_REGISTER_CONTROL_STATUSW = packed record
cbSize: DWORD;
FileName: PWideChar;
Win32Error: DWORD;
FailureCode: DWORD;
end;
{$EXTERNALSYM SP_REGISTER_CONTROL_STATUSW}
TSPRegisterControlStatusA = SP_REGISTER_CONTROL_STATUSA;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -