Win32API::File - 對檔案/目錄進行 Win32 系統 API 呼叫的低階存取。
use Win32API::File 0.08 qw( :ALL );
MoveFile( $Source, $Destination )
or die "Can't move $Source to $Destination: ",fileLastError(),"\n";
MoveFileEx( $Source, $Destination, MOVEFILE_REPLACE_EXISTING() )
or die "Can't move $Source to $Destination: ",fileLastError(),"\n";
[...]
提供對處理檔案和目錄的 Win32 系統 API 呼叫的相當低階存取。
若要傳入 NULL
作為選用緩衝區的指標,請傳入空的清單參考,[]
。
除了對 API 呼叫和相關常數的原始存取外,此模組還處理智慧型緩衝區配置和回傳碼轉換。
除非另有註明,否則所有函式在成功時會回傳 true 值,在失敗時會回傳 false 值,並在失敗時設定 $^E
。
警告:這是新程式碼,請自行承擔風險使用。
此版本的 Win32API::File
可用於類似 IO::File
物件的方式
my $file = Win32API::File->new("+> foo");
binmode $file;
print $file "hello there\n";
seek $file, 0, 0;
my $line = <$file>;
$file->close;
它也支援透過 win32 處理 (例如,來自 createFile()
) 繫結
tie FILE, 'Win32API::File', $win32_handle;
print FILE "...";
它尚未經過廣泛測試,而且尚未實作緩衝 I/O。
預設不匯出任何內容。下列標籤可用於匯出大量的符號:":Func"
、":FuncA"
、":FuncW"
、":Misc"
、":DDD_"
、":DRIVE_"
、":FILE_"
、":FILE_ATTRIBUTE_"
、":FILE_FLAG_"
、":FILE_SHARE_"
、":FILE_TYPE_"
、":FS_"
、":FSCTL_"
、":HANDLE_FLAG_"
、":IOCTL_STORAGE_"
、":IOCTL_DISK_"
、":GENERIC_"
、":MEDIA_TYPE"
、":MOVEFILE_"
、":SECURITY_"
、":SEM_"
和 ":PARTITION_"
。
":Func"
基本函數名稱:attrLetsToBits
、createFile
、fileConstant
、fileLastError
、getLogicalDrives
、setFilePointer
、getFileSize
、CloseHandle
、CopyFile
、CreateFile
、DefineDosDevice
、DeleteFile
、DeviceIoControl
、FdGetOsFHandle
、GetDriveType
、GetFileAttributes
、GetFileSize
、GetFileType
、GetHandleInformation
、GetLogicalDrives
、GetLogicalDriveStrings
、GetOsFHandle
、GetOverlappedResult
、GetVolumeInformation
、IsContainerPartition
、IsRecognizedPartition
、MoveFile
、MoveFileEx
、OsFHandleOpen
、OsFHandleOpenFd
、QueryDosDevice
、ReadFile
、SetErrorMode
、SetFilePointer
、SetHandleInformation
和 WriteFile
。
$uBits= attrLetsToBits( $sAttributeLetters )
將檔案屬性字母字串轉換為設定對應位元的無符號值。$sAttributeLetters
應包含 "achorst"
中的零個或多個字母
$hObject= createFile( $sPath )
$hObject= createFile( $sPath, $rvhvOptions )
$hObject= createFile( $sPath, $svAccess )
$hObject= createFile( $sPath, $svAccess, $rvhvOptions )
這是一個 Perl 友善的包裝器,用於 CreateFile
。
如果失敗,$hObject
會設為 false 值,而 regLastError()
和 $^E
會設為失敗原因。否則,$hObject
會設為 Win32 原生檔案句柄,它永遠都是 true 值 [在句柄值為 0
的不可能 (?) 情況下,會傳回 "0 but true"
]。
$sPath
是要開啟的檔案 [或裝置等] 路徑。有關 $sPath
可能特殊值的更多資訊,請參閱 CreateFile
。
$svAccess
可以是包含位元遮罩的數字,用於表示您對檔案所需要的特定存取類型。有關這些值的詳細資料,請參閱 CreateFile
的 $uAccess
參數。
更可能的是,$svAccess
是描述您需要的通用存取類型以及可能使用的檔案建立選項的字串。在此情況下,$svAccess
應包含來自 "qrw"
[所需的存取] 的零個或多個字元,來自 "ktn"
和 "ce"
的各一個或零個字元,以及空白。這些字母分別代表「查詢存取」、「讀取存取」、「寫入存取」、「如果存在則保留」、「如果存在則截斷」、「僅限新檔案」、「如果不存在則建立」和「僅限現有檔案」。不區分大小寫。
您可以傳入 "?"
給 $svAccess
,以顯示錯誤訊息,摘要說明其可能的值。在使用 Perl 除錯程式進行即時程式設計時,這非常方便。
Win32API::File::createFile: $svAccess can use the following:
One or more of the following:
q -- Query access (same as 0)
r -- Read access (GENERIC_READ)
w -- Write access (GENERIC_WRITE)
At most one of the following:
k -- Keep if exists
t -- Truncate if exists
n -- New file only (fail if file already exists)
At most one of the following:
c -- Create if doesn't exist
e -- Existing file only (fail if doesn't exist)
'' is the same as 'q k e'
'r' is the same as 'r k e'
'w' is the same as 'w t c'
'rw' is the same as 'rw k c'
'rt' or 'rn' implies 'c'.
Or $access can be numeric.
$svAccess
的設計目的是「執行我的意思」,因此除非您有興趣了解複雜的細節,否則您可以略過其餘的說明。請注意,如果您想要對裝置進行寫入存取,您需要指定 "k"
[以及可能是 "e"
,例如 "w ke"
或 "rw ke"
],因為 Win32 建議在開啟裝置時使用 OPEN_EXISTING
。
"q"
代表「查詢存取」。這實際上並未執行任何操作,因為您在開啟檔案時始終具有查詢存取。您可以指定 "q"
來記錄您打算查詢檔案 [或裝置等]。當您不想要讀取或寫入存取時,這特別有幫助,因為像 "q"
或 "q ke"
之類的東西可能比僅 ""
或 "ke"
更容易理解。
"r"
代表「讀取存取」。在傳遞給 CreateFile
的 $uAccess
中設定 GENERIC_READ
位元。如果 $svAccess
參數遺失 [或如果它為 undef
且 $rvhvOptions
未指定 "Access"
選項],則這是預設存取。
"w"
代表「寫入存取」。在傳遞給 CreateFile
的 $uAccess
中設定 GENERIC_WRITE
位元。
"k"
代表「如果存在,則保留」。如果請求的檔案存在,則會開啟它。這是預設值,除非已請求 GENERIC_WRITE
存取但未請求 GENERIC_READ
存取。與 "t"
和 "n"
相反。
"t"
代表「如果存在,則截斷」。如果請求的檔案存在,則會將它截斷為長度為零,然後開啟它。如果已請求 GENERIC_WRITE
存取但未請求 GENERIC_READ
存取,則這是預設值。與 "k"
和 "n"
相反。
"n"
代表「僅限新檔案」。如果請求的檔案存在,則不會開啟它,且 createFile
呼叫會失敗。與 "k"
和 "t"
相反。無法與 "e"
搭配使用。
"c"
代表「如果沒有,則建立」。如果請求的檔案不存在,則會建立它,然後開啟它。如果已請求 GENERIC_WRITE
存取,或已指定 "t"
或 "n"
,則這是預設值。與 "e"
相反。
"e"
代表「僅限現有檔案」。如果請求的檔案不存在,則不會開啟任何檔案,且 createFile
呼叫會失敗。這是預設值,除非已請求 GENERIC_WRITE
存取,或已指定 "t"
或 "n"
。與 "c"
相反。無法與 "n"
搭配使用。
將 "ktn"
和 "ce"
中的字元組合,以決定傳遞給 CreateFile
的 $uCreate
值 [除非已由 $rvhvOptions
覆寫]
"kc"
OPEN_ALWAYS
"ke"
OPEN_EXISTING
"tc"
TRUNCATE_EXISTING
"te"
CREATE_ALWAYS
"nc"
CREATE_NEW
"ne"
不合法。
$svShare
控制檔案的共用方式,也就是在我們開啟檔案時,其他處理程序是否可以對檔案有讀取、寫入和/或刪除存取權。$svShare
通常會是包含 "rwd"
中零個或多個字元的字串,但也可以是數字位元遮罩。
"r"
設定 FILE_SHARE_READ
位元,允許其他處理程序對檔案有讀取存取權。"w"
設定 FILE_SHARE_WRITE
位元,允許其他處理程序對檔案有寫入存取權。"d"
設定 FILE_SHARE_DELETE
位元,允許其他處理程序對檔案有刪除存取權 [在 Windows 95 中會忽略]。
$svShare
的預設值為 "rw"
,它提供與使用一般 perl open()
相同的共用。
如果另一個程序目前具有對檔案的讀取、寫入和/或刪除存取權,而您不允許該共用層級,則您對 createFile
的呼叫將會失敗。如果您要求讀取、寫入和/或刪除存取權,而另一個程序已開啟該檔案,但又不允許該共用層級,則您對 createFile
的呼叫將會失敗。一旦您開啟檔案,如果另一個程序嘗試以讀取、寫入和/或刪除存取權開啟它,而您不允許該共用層級,則該程序將無法開啟該檔案。
$rvhvOptions
是對雜湊的參考,其中任何鍵都必須來自清單 qw( Access Create Share Attributes Flags Security Model )
。值的意義取決於鍵名稱,如下所述。$rvhvOptions
中的任何選項值都會覆寫 $svAccess
和 $svShare
中的設定(如果它們衝突)。
$uFlags
是未簽署的值,其中設定了任何 FILE_FLAG_*
或 FILE_ATTRIBUTE_*
位元。透過 Attributes
選項設定的任何 FILE_ATTRIBUTE_*
位元都會以邏輯 or
與這些位元相連。預設為 0
。
如果開啟命名管道的用戶端端,則您也可以指定 SECURITY_SQOS_PRESENT
以及其他 SECURITY_*
常數之一,以指定要使用的安全性服務品質。
一個由 "achorst"
組成的零個或多個字元字串 [更多資訊請參閱 attrLetsToBits
],轉換為要設定在傳遞給 CreateFile
的 $uFlags
參數中的 FILE_ATTRIBUTE_*
位元。
$pSecurityAttributes
應包含封裝在字串或 []
[預設值] 中的 SECURITY_ATTRIBUTES
結構。
$hModelFile
應包含使用 GENERIC_READ
存取權限開啟的,用於複製檔案屬性和延伸屬性的範本檔案的控制代碼。或者,$hModelFile
可以為 0
[預設值]。
$sAccess
應為由 "qrw"
組成的零個或多個字元的字串,指定所需的存取類型:「查詢」或 0
、「讀取」或 GENERIC_READ
[預設值],或「寫入」或 GENERIC_WRITE
。
$uAccess
應為包含設定位元以指示所需存取類型的無符號值。GENERIC_READ
為預設值。
$sCreate
應為包含由 "ktn"
組成的零個或一個字元,以及由 "ce"
組成的零個或一個字元的字串。這些代表「如果存在則保留」、「如果存在則截斷」、「僅限新檔案」、「如果不存在則建立」和「僅限現有檔案」。這些會轉譯成 $uCreate
值。
$uCreate
應為 OPEN_ALWAYS
、OPEN_EXISTING
、TRUNCATE_EXISTING
、CREATE_ALWAYS
或 CREATE_NEW
之一。
$sShare
應為一個字串,包含 "rwd"
中的零個或多個字元,並轉譯為 $uShare
值。"rw"
為預設值。
$uShare
應為具有設定下列零個或多個位元的無符號值:FILE_SHARE_READ
、FILE_SHARE_WRITE
和 FILE_SHARE_DELETE
。FILE_SHARE_READ|FILE_SHARE_WRITE
為預設值。
範例
$hFlop= createFile( "//./A:", "r", "r" )
or die "Can't prevent others from writing to floppy: $^E\n";
$hDisk= createFile( "//./C:", "rw ke", "" )
or die "Can't get exclusive access to C: $^E\n";
$hDisk= createFile( $sFilePath, "ke",
{ Access=>FILE_READ_ATTRIBUTES } )
or die "Can't read attributes of $sFilePath: $^E\n";
$hTemp= createFile( "$ENV{Temp}/temp.$$", "wn", "",
{ Attributes=>"hst", Flags=>FILE_FLAG_DELETE_ON_CLOSE() } )
or die "Can't create temporary file, temp.$$: $^E\n";
@roots= getLogicalDrives()
傳回當前定義的所有邏輯磁碟機的根目錄路徑。這包括所有類型的磁碟機代號,例如磁碟片、CD-ROM、硬碟和網路分享。在設備不佳的電腦上,典型的傳回值會是 ("A:\\","C:\\")
。
CloseHandle( $hObject )
關閉 Win32 原生處理,例如透過 CreateFile
開啟的處理。與大多數常式一樣,如果成功會傳回真值,如果失敗會傳回假值 [並設定 $^E
和 regLastError()
]。
CopyFile( $sOldFileName, $sNewFileName, $bFailIfExists )
$sOldFileName
是要複製檔案的路徑。$sNewFileName
是要複製檔案的目的地路徑。請注意,您無法只在 $sNewFileName
中指定目錄路徑,並使用相同檔案名稱將檔案複製到該目錄。
如果 $bFailIfExists
為真,且 $sNewFileName
是已存在檔案的路徑,則 CopyFile
會失敗。如果 $bFailIfExists
為假,則 $sOldFileNmae
檔案的副本會覆寫已存在的 $sNewFileName
檔案。
與大多數常式一樣,如果成功會傳回真值,如果失敗會傳回假值 [並設定 $^E
和 regLastError()
]。
如果失敗,$hObject
會設定為 false 值,而 $^E
和 fileLastError()
會設定為失敗原因。否則,$hObject
會設定為 Win32 原生檔案控制代碼,它永遠是 true 值 [在控制代碼具有 0
值的不可能 (?) 的情況下傳回 "0 但為 true"
]。
$sPath
是要開啟的檔案 [或裝置等] 的路徑。
$sPath
可以使用 "/"
或 "\\"
作為路徑分隔符,甚至可以混合使用這兩個分隔符。我們通常只會在範例中使用 "/"
,因為使用 "\\"
通常較難閱讀。
在 Windows NT 中,$sPath
可以以 "//?/"
開頭,以允許使用長度超過 MAX_PATH
的路徑 [對於 UNC 路徑,請將開頭的 "//"
取代為 "//?/UNC/"
,例如 "//?/UNC/Server/Share/Dir/File.Ext"
]。
$sPath
可以以 "//./"
開頭,以表示路徑的其餘部分是「DOS 裝置」的名稱。您可以使用 QueryDosDevice
列出所有目前的 DOS 裝置,並可以使用 DefineDosDevice
新增或刪除這些裝置。如果您從 CPAN 取得此模組的原始碼發行版,則它包含範例指令碼 ex/ListDevs.plx,它會列出所有目前的 DOS 裝置及其「原生」定義。再次注意,這在 Win95 或 Win98 中無法使用。
最常見的此類 DOS 裝置包括
"//./PhysicalDrive0"
您的整個第一個硬碟。在 Windows 95 中無法使用。這允許您讀取或寫入硬碟的原始扇區,並使用 DeviceIoControl
對硬碟執行雜項查詢和作業。寫入原始扇區和某些其他作業可能會嚴重損壞您的檔案或電腦的功能。
鎖定此裝置以取得獨佔存取權 [透過為 $uShare
指定 0
] 不會阻止存取磁碟上的分割區或其檔案系統。因此,其他處理程序仍然可以存取分割區內的任何原始扇區,並可以照常使用磁碟上的檔案系統。
"//./C:"
您的 C: 磁碟分割區。在 Windows 95 中無法使用。這讓您可以讀取或寫入該分割區的原始磁區,並使用 DeviceIoControl
對分割區執行不同的查詢和操作。寫入原始磁區和其他某些操作可能會嚴重損壞您的檔案或電腦功能。
鎖定此分割區以取得獨佔存取權並不會阻止存取分割區所在的實體磁碟機,因此其他程序仍然可以使用這種方式存取原始磁區。鎖定此分割區以取得獨佔存取權會阻止其他程序開啟相同的原始分割區,也會阻止存取該分割區上的檔案系統。它甚至會阻止目前的程序存取該分割區上的檔案系統。
"//./A:"
原始磁碟片。在 Windows 95 中無法使用。這讓您可以讀取或寫入磁碟片的原始磁區,並使用 DeviceIoControl
對磁碟片或磁碟機執行不同的查詢和操作。
鎖定此分割區以取得獨佔存取權會阻止所有存取磁碟片的動作。
"//./PIPE/PipeName"
一個命名管線,透過 CreateNamedPipe
建立。
$uAccess
是個未簽署的值,其中設定的位元表示所需的存取類型。通常是 0
[「查詢」存取權]、GENERIC_READ
、GENERIC_WRITE
、GENERIC_READ|GENERIC_WRITE
或 GENERIC_ALL
。可以指定更明確的存取類型,例如 FILE_APPEND_DATA
或 FILE_READ_EA
。
$uShare
控制檔案的共用方式,也就是在我們開啟檔案時,其他程序是否可以讀取、寫入和/或刪除檔案的存取權。$uShare
是未簽署值,其中設定了這些位元組的零個或多個:FILE_SHARE_READ
、FILE_SHARE_WRITE
和 FILE_SHARE_DELETE
。
如果另一個程序目前有讀取、寫入和/或刪除檔案的存取權,而您不允許這種共用層級,則您對 CreateFile
的呼叫將會失敗。如果您要求讀取、寫入和/或刪除存取權,而另一個程序已經開啟檔案,但又不允許這種共用層級,則您對 createFile
的呼叫將會失敗。一旦您開啟檔案,如果另一個程序嘗試以讀取、寫入和/或刪除存取權來開啟檔案,而您又不允許這種共用層級,則該程序將無法開啟檔案。
$pSecAttr
應該為 []
[對於 NULL
] 或封裝在字串中的 SECURITY_ATTRIBUTES
資料結構。例如,如果 $pSecDesc
包含封裝在字串中的 SECURITY_DESCRIPTOR
結構,也許透過
RegGetKeySecurity( $key, 4, $pSecDesc, 1024 );
然後您可以透過設定 $pSecAttr
$pSecAttr= pack( "L P i", 12, $pSecDesc, $bInheritHandle );
$uCreate
是下列值之一:OPEN_ALWAYS
、OPEN_EXISTING
、TRUNCATE_EXISTING
、CREATE_ALWAYS
和 CREATE_NEW
。
$uFlags
是未簽署值,其中設定了零個或多個位元組,表示要與檔案關聯的屬性 [FILE_ATTRIBUTE_*
值] 或特殊選項 [FILE_FLAG_*
值]。
如果開啟命名管道的用戶端端點,則您也可以設定 $uFlags
,以包含 SECURITY_SQOS_PRESENT
以及其他 SECURITY_*
常數之一,以指定要使用的安全性服務品質。
$hModel
是 0
[或 []
,兩者都表示 NULL
] 或使用 GENERIC_READ
存取權限開啟的 Win32 原生處理序,用於開啟模型檔案,如果建立新檔案,則會從中複製檔案屬性和延伸屬性。
範例
$hFlop= CreateFile( "//./A:", GENERIC_READ(),
FILE_SHARE_READ(), [], OPEN_EXISTING(), 0, [] )
or die "Can't prevent others from writing to floppy: $^E\n";
$hDisk= CreateFile( $sFilePath, FILE_READ_ATTRIBUTES(),
FILE_SHARE_READ()|FILE_SHARE_WRITE(), [], OPEN_EXISTING(), 0, [] )
or die "Can't read attributes of $sFilePath: $^E\n";
$hTemp= CreateFile( "$ENV{Temp}/temp.$$", GENERIC_WRITE(), 0,
CREATE_NEW(), FILE_FLAG_DELETE_ON_CLOSE()|attrLetsToBits("hst"), [] )
or die "Can't create temporary file, temp.$$: $^E\n";
DefineDosDevice( $uFlags, $sDosDeviceName, $sTargetPath )
定義新的 DOS 裝置,覆寫 DOS 裝置的目前定義,或刪除 DOS 裝置的定義。與大多數常式一樣,如果成功會傳回真值,如果失敗會傳回假值 [並設定 $^E
和 regLastError()
]。
$sDosDeviceName
是我們想要新增或刪除定義的 DOS 裝置名稱。
$uFlags
是未簽署值,設定下列其中一個或多個位元
DDD_RAW_TARGET_PATH
表示 $sTargetPath
會是原始的 Windows NT 物件名稱。這通常表示 $sTargetPath
以 "\\Device\\"
開頭。請注意,您無法在原始目標路徑名稱中使用 "/"
取代 "\\"
。
DDD_REMOVE_DEFINITION
要求刪除定義。如果 $sTargetPath
是 []
[表示 NULL
],則會移除 $sDosDeviceName
最近新增的定義。否則會移除與 $sTargetPath
相符的最近新增定義。
如果移除最後一個定義,則也會刪除 DOS 裝置名稱。
DDD_EXACT_MATCH_ON_REMOVE
刪除定義時,此位元會導致每個 $sTargetPath
在搜尋最近新增的比對時,與完整長度的定義進行比對。如果未設定此位元,則 $sTargetPath
僅需要與定義的前置詞相符。
$sTargetPath
是您想要新增或刪除的 DOS 裝置特定定義。對於 DDD_RAW_TARGET_PATH
,這些通常以 "\\Device\\"
開頭。如果未設定 DDD_RAW_TARGET_PATH
位元,則 $sTargetPath
僅是某個檔案或目錄的普通路徑,提供 subst 指令的功能。
DeleteFile( $sFileName )
刪除已命名的檔案。與 Perl 的 unlink
相比,DeleteFile
的優點是不會刪除唯讀檔案。對於 某些 Perl 版本,unlink
會在刪除檔案前,無論是否需要,都會靜默呼叫 chmod
,因此您已透過標記為唯讀來保護的檔案,並非總是能受到 Perl 的 unlink
保護。
與大多數常式一樣,如果成功會傳回真值,如果失敗會傳回假值 [並設定 $^E
和 regLastError()
]。
DeviceIoControl( $hDevice, $uIoControlCode, $pInBuf, $lInBuf, $opOutBuf, $lOutBuf, $olRetBytes, $pOverlapped )
要求對 I/O [輸入/輸出] 裝置執行特殊作業,例如彈出磁帶或格式化磁碟。與大多數常式一樣,如果成功則傳回 true 值,如果失敗則傳回 false 值 [並設定 $^E
和 regLastError()
]。
$hDevice
是裝置的 Win32 原生檔案控制代碼 [CreateFile
的傳回值]。
$uIoControlCode
是一個未簽署的值 [一個 IOCTL_*
或 FSCTL_*
常數],表示要執行的查詢類型或其他操作。
$pInBuf
是 []
[對於 NULL
] 或打包成字串的資料結構。資料結構的類型取決於 $uIoControlCode
值。$lInBuf
是 0
或 $pInBuf
中結構的長度。如果 $pInBuf
不是 []
而 $lInBuf
是 0
,則會自動將 $lInBuf
設為 length($pInBuf)
。
$opOutBuf
是 []
[對於 NULL
] 或將設為包含打包成字串的已傳回資料結構。$lOutBuf
表示在 $opOutBuf
中要配置多少空間,供 DeviceIoControl
儲存資料結構。如果 $lOutBuf
是數字且 $opOutBuf
已為其配置一個大於 $lOutBuf
位元的緩衝區,則會將這個較大的緩衝區大小傳遞給 DeviceIoControl
。不過,您可以透過在 $lOutBuf
前面加上 "="
來強制傳遞特定緩衝區大小給 DeviceIoControl
。
$olRetBytes
是 []
或是一個標量,用於接收寫入 $opOutBuf
的位元組數。即使 $olRetBytes
是 []
,也會將一個指向 DWORD
[而不是 NULL
] 的有效指標傳遞給 DeviceIoControl
。在此情況下,[]
僅表示您不關心可能會寫入 $olRetBytes
的值,這通常是情況,因為您通常可以使用 length($opOutBuf)
來代替。
$pOverlapped
是 []
或打包成字串的 OVERLAPPED
結構。這僅在使用 FILE_FLAG_OVERLAPPED
旗標開啟 $hDevice
時才有用。
$hNativeHandle= FdGetOsFHandle( $ivFd )
FdGetOsFHandle
只會呼叫 _get_osfhandle()
。它已重新命名,以便更符合此模組的其他函式名稱,特別是為了與 GetOsFHandle
區分。它會取得一個整數檔案描述符 [來自 Perl 的 fileno
],並傳回與該檔案描述符關聯的 Win32 原生檔案控制代碼,或在 $ivFd
不是開啟的檔案描述符時傳回 INVALID_HANDLE_VALUE
。
當您呼叫 Perl 的 open
來設定 Perl 檔案控制代碼 [例如 STDOUT
] 時,Perl 會呼叫 C 的 fopen
來設定 stdio FILE *
。C 的 fopen
會呼叫類似 Unix 的 open
,也就是 Win32 的 _sopen
,來取得一個整數檔案描述符 [其中 0 代表 STDIN
,1 代表 STDOUT
,等等]。Win32 的 _sopen
會呼叫 CreateFile
來設定 HANDLE
,一個 Win32 原生檔案控制代碼。因此,每個 Perl 檔案控制代碼 [例如 STDOUT
] 都有一個整數檔案描述符與之關聯,您可以透過 fileno
取得。此外,在 Win32 下,每個檔案描述符都有一個 Win32 原生檔案控制代碼與之關聯。FdGetOsFHandle
讓您可以取得對它的存取權。
如果 FdGetOsFHandle
失敗,$hNativeHandle
會設定為 INVALID_HANDLE_VALUE
[且 lastFileError()
和 $^E
會設定]。另請參閱 GetOsFHandle
,它提供一個更友善的介面。
$value= fileConstant( $sConstantName )
擷取常數的值。如果 $sConstantName
不是此模組支援的常數名稱,則傳回 undef
。絕不會設定 $!
或 $^E
。
這個函式很少使用,因為您通常會透過在 use Win32API::File
陳述式中列出常數名稱,將該常數匯入您的套件來取得常數的值,然後在您的程式碼中使用常數名稱 [可能後面接著 ()
]。這個函式對於驗證 Perl 程式碼中不存在的常數名稱很有用,例如,在提示使用者輸入常數名稱後。
$svError= fileLastError();
fileLastError( $uError );
傳回此模組中常式所遭遇的最後一個錯誤。它就像 $^E
一樣,但只有此模組中的常式會變更它。理想上,你只要使用 $^E
即可,但目前版本的 Perl 經常在你來得及檢查之前就覆寫 $^E
,而非常舊版本的 Perl 在 Win32 下並不支援 $^E
。
就像 $^E
一樣,在數字脈絡中,fileLastError()
傳回數字錯誤值,而在字串脈絡中,它傳回錯誤的文字說明 [它實際上傳回一個包含兩個值的 Perl 純量,因此 $x= fileLastError()
會導致 $x
在字串與數字脈絡中傳回不同的值]。
最後一個形式設定未來呼叫 fileLastError()
所傳回的錯誤,不應經常使用。$uError
必須是數字錯誤碼。也會傳回 $uError
的雙重值版本。
$uDriveType= GetDriveType( $sRootPath )
取得一個字串,提供檔案系統根目錄的路徑 [稱為「磁碟機」,因為每個檔案系統都指定一個「磁碟機代號」],並傳回一個未簽名的值,指出檔案系統所在的磁碟機類型。傳回值應為下列之一
$uAttrs = GetFileAttributes( $sPath )
取得路徑字串並傳回具有屬性旗標的未簽署值。如果失敗,則傳回 INVALID_FILE_ATTRIBUTES,否則可以是下列值中的一個或多個
FILE_ATTRIBUTE_ARCHIVE
檔案或目錄是封存檔案或目錄。應用程式使用這個屬性來標記要備份或移除的檔案。
FILE_ATTRIBUTE_COMPRESSED
檔案或目錄已壓縮。對於檔案,這表示檔案中的所有資料都已壓縮。對於目錄,這表示壓縮是新建立的檔案和子目錄的預設值。
FILE_ATTRIBUTE_DEVICE
保留;請勿使用。
FILE_ATTRIBUTE_DIRECTORY
控制碼識別目錄。
FILE_ATTRIBUTE_ENCRYPTED
檔案或目錄已加密。對於檔案,這表示檔案中的所有資料串流都已加密。對於目錄,這表示加密是新建立的檔案和子目錄的預設值。
FILE_ATTRIBUTE_HIDDEN
檔案或目錄已隱藏。它不會包含在一般目錄清單中。
FILE_ATTRIBUTE_NORMAL
檔案或目錄沒有設定其他屬性。此屬性僅在單獨使用時才有效。
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
檔案不會由內容索引服務索引。
FILE_ATTRIBUTE_OFFLINE
檔案的資料無法立即取得。此屬性表示檔案資料已實體移至離線儲存。此屬性由遠端儲存 (階層式儲存管理軟體) 使用。應用程式不應任意變更此屬性。
FILE_ATTRIBUTE_READONLY
檔案或目錄為唯讀。應用程式可以讀取檔案,但無法寫入或刪除檔案。如果是目錄,應用程式無法刪除它。
FILE_ATTRIBUTE_REPARSE_POINT
檔案或目錄有相關的重新分析點。
FILE_ATTRIBUTE_SPARSE_FILE
檔案為稀疏檔案。
FILE_ATTRIBUTE_SYSTEM
檔案或目錄是作業系統的一部分,或專門由作業系統使用。
FILE_ATTRIBUTE_TEMPORARY
檔案用於暫時儲存。如果快取記憶體足夠,檔案系統會避免將資料寫回大量儲存,因為應用程式通常會在關閉控制代碼後立即刪除暫存檔。在這種情況下,系統可以完全避免寫入資料。否則,資料會在關閉控制代碼後寫入。
$uFileType= GetFileType( $hFile )
取得 Win32 原生檔案控制代碼,並傳回一個 FILE_TYPE_*
常數,表示在該控制代碼上開啟的檔案類型
$size= getFileSize( $hFile )
這是 GetFileSize
(如下) API 呼叫的 Perl 友善包裝函式。
它取得 Win32 原生檔案控制代碼,並傳回以位元組為單位的檔案大小。由於大小可能是 64 位元值,因此在非 64 位元整數 Perl 中,傳回的值將是 Math::BigInt
型別的物件。
$iSizeLow= GetFileSize($win32Handle, $iSizeHigh)
傳回由 $win32Handle
指向的檔案大小,如果 $iSizeHigh
不為 []
,則選擇性地將高階 32 位元儲存在 $iSizeHigh
中。如果 $iSizeHigh
為 []
,則非零值表示成功。否則,如果失敗,傳回值將為 0xffffffff
,而 fileLastError()
將不為 NO_ERROR
。
$bRetval= GetOverlappedResult( $win32Handle, $pOverlapped, $numBytesTransferred, $bWait )
用於 Win32 中的非同步 IO,以取得掛起的 IO 作業結果,例如當檔案作業傳回 ERROR_IO_PENDING
時。失敗時傳回 false 值。$overlapped
結構和 $numBytesTransferred
會修改為作業的結果。
至於建立 $pOverlapped
結構,目前您必須自行建立。
請參閱 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getoverlappedresult.asp 以取得更多資訊。
$uDriveBits= GetLogicalDrives()
傳回一個未簽署的值,其中每個目前定義的磁碟機代號設定一個位元。如果「A:」目前是有效的磁碟機代號,則 1
位元會在 $uDriveBits
中設定。如果「B:」有效,則 2
位元會設定。如果「Z:」有效,則 2**26
[0x4000000
] 位元會設定。
$olOutLength= GetLogicalDriveStrings( $lBufSize, $osBuffer )
對於每個目前定義的磁碟機代號,會建立一個以 '\0'
結尾的字串,表示其檔案系統根目錄的路徑。所有這些字串會串接成一個較大的字串,並加上一個額外的終止 '\0'
。這個較大的字串會傳回至 $osBuffer
。請注意,這包括已定義但沒有檔案系統的磁碟機代號,例如指定給未格式化分割區的磁碟機代號。
$lBufSize
是要配置來儲存這個字串清單的緩衝區大小。26*4+1
永遠足夠,而且通常應該使用。
$osBuffer
是要設定為包含建立字串的純量。
$olOutLength
是實際寫入 $osBuffer
的位元組數,但也可以使用 length($osBuffer)
來判斷。
例如,在設備不佳的電腦上,
GetLogicalDriveStrings( 4*26+1, $osBuffer );
可能會將 $osBuffer
設定為 9 個字元的字串,"A:\\\0C:\\\0\0"
。
GetHandleInformation( $hObject, $ouFlags )
擷取與 Win32 原生檔案控制代碼或物件控制代碼相關聯的旗標。
$hObject
是開啟的 Win32 原生檔案控制代碼或開啟的 Win32 原生控制代碼,用於其他類型的物件。
$ouFlags
會設定為未設定或設定零個或多個位元 HANDLE_FLAG_INHERIT
和 HANDLE_FLAG_PROTECT_FROM_CLOSE
的未簽署值。請參閱 ":HANDLE_FLAG_"
匯出類別,了解這些位元的意義。
$hNativeHandle= GetOsFHandle( FILE )
取得 Perl 檔案控制代碼 [例如 STDIN
],並傳回與其相關聯的 Win32 原生檔案控制代碼。請參閱 FdGetOsFHandle
,以取得有關 Win32 原生檔案控制代碼的更多資訊。
如果 GetOsFHandle
失敗,$hNativeHandle
會設定為 false 值 [且 lastFileError()
和 $^E
會設定]。在控制代碼值為 0
的不可能 (?) 情況下,GetOsFHandle
會傳回 "0 但為 true"
。
GetVolumeInformation( $sRootPath, $osVolName, $lVolName, $ouSerialNum, $ouMaxNameLen, $ouFsFlags, $osFsType, $lFsType )
取得檔案系統磁碟區的資訊,如果成功,傳回 true 值。如果失敗,傳回 false 值,並設定 fileLastError()
和 $^E
。
$sRootPath
是指定檔案系統根目錄路徑的字串,例如 "C:/"
。
$osVolName
是要設定為代表磁碟名稱的字串的標量,也稱為檔案系統標籤。$lVolName
是要配置給 $osVolName
緩衝區的位元組數目 [有關更多資訊,請參閱 "緩衝區大小"]。
$ouSerialNum
是 []
[表示 NULL
] 或將設定為磁碟序號的數值。
$ouMaxNameLen
是 []
[表示 NULL
] 或將設定為檔案系統內檔案名稱或目錄名稱允許的最大長度。
$osFsType
是要設定為代表檔案系統類型的字串的標量,例如 "FAT"
或 "NTFS"
。$lFsType
是要配置給 $osFsType
緩衝區的位元組數目 [有關更多資訊,請參閱 "緩衝區大小"]。
$ouFsFlags
是 []
[表示 NULL
] 或將設定為未簽署整數,其中設定的位元表示檔案系統的屬性
FS_CASE_IS_PRESERVED
檔案系統會保留檔案名稱的大小寫 [通常為 true]。也就是說,它不會變更檔案名稱的大小寫,例如強制轉換為大寫或小寫。
FS_CASE_SENSITIVE
檔案系統支援不忽略檔案名稱大小寫的能力 [但可能會忽略您使用的方式的大小寫]。也就是說,檔案系統有能力強制您正確取得檔案名稱的字母大小寫才能開啟它。這對於「NTFS」檔案系統而言為 true,即使檔案名稱中的大小寫通常仍會被忽略。
FS_UNICODE_STORED_ON_DISK
檔案系統會在檔案名稱中保留 Unicode [對於「NTFS」為 true]。
FS_PERSISTENT_ACLS
檔案系統支援在檔案上設定存取控制清單 [對於「NTFS」為 true]。
FS_FILE_COMPRESSION
檔案系統支援逐檔案壓縮 [對於「NTFS」為 true]。
FS_VOL_IS_COMPRESSED
整個檔案系統已壓縮,例如透過「DoubleSpace」。
IsRecognizedPartition( $ivPartitionType )
取得分割區類型,並傳回 Win32 是否支援該分割區類型。$ivPartitonType
是整數值,來自硬碟 DOS 相容分割區表的作業系統位元組 [也就是 x86-based Win32 的分割區表,例如,不是用於 Alpha 處理器的 Windows NT 的分割區表]。例如,PARTITION_INFORMATION
結構的 PartitionType
成員。
$ivPartitionType
的常見值包括 PARTITION_FAT_12==1
、PARTITION_FAT_16==4
、PARTITION_EXTENDED==5
、PARTITION_FAT32==0xB
。
IsContainerPartition( $ivPartitionType )
取得分割區類型,並傳回該分割區是否為 Win32 支援的「容器」分割區,也就是是否為可以包含「邏輯」分割區的「延伸」分割區。$ivPartitonType
與 IsRecognizedPartition
相同。
MoveFile( $sOldName, $sNewName )
重新命名檔案或目錄。$sOldName
是要重新命名的現有檔案或目錄的名稱。$sNewName
是要給檔案或目錄的新名稱。如果搬移成功,會傳回 true 值。如果失敗,會傳回 false 值,並將 fileLastErorr()
和 $^E
設為失敗原因。
檔案可以在檔案系統之間「重新命名」,而且檔案內容和一些屬性會被搬移。目錄只能在一個檔案系統內重新命名。如果已經有檔案或目錄的名稱是 $sNewName
,則 MoveFile
會失敗。
MoveFileEx( $sOldName, $sNewName, $uFlags )
重新命名檔案或目錄。$sOldName
是要重新命名的現有檔案或目錄的名稱。$sNewName
是要給檔案或目錄的新名稱。如果搬移成功,會傳回 true 值。如果失敗,會傳回 false 值,並將 fileLastErorr()
和 $^E
設為失敗原因。
$uFlags
是未簽署值,設定下列其中一個或多個位元
MOVEFILE_REPLACE_EXISTING
如果設定此位元,且已存在名為 $sNewName
的檔案 [但不是目錄],則它會被 $sOldName
取代。如果未設定此位元,則 MoveFileEx
會失敗,而不是取代現有的 $sNewName
。
MOVEFILE_COPY_ALLOWED
允許檔案 [但不是目錄] 透過複製 $sOldName
檔案資料和一些屬性至 $sNewName
,然後刪除 $sOldName
,在檔案系統之間移動。如果未設定此位元 [或如果 $sOldName
表示目錄],且 $sNewName
參考與 $sOldName
不同的檔案系統,則 MoveFileEx
會失敗。
MOVEFILE_DELAY_UNTIL_REBOOT
進行初步驗證,然後新增一個項目至登錄,以導致在下次啟動此作業系統副本時 [在任何自動檔案系統檢查完成後] 執行重新命名 [或刪除] 作業。Windows 95 不支援此功能。
設定此位元時,$sNewName
可以是 []
[表示 NULL
],以指出應在下次啟動時刪除 $sOldName
,而不是重新命名。
同時設定 MOVEFILE_COPY_ALLOWED
和 MOVEFILE_DELAY_UNTIL_REBOOT
位元會導致 MoveFileEx
失敗。
MOVEFILE_WRITE_THROUGH
確保 MoveFileEx
在作業完成並已寫入磁碟後才會傳回。Windows 95 不支援此功能。僅影響重新命名檔案至另一個檔案系統,並在複製作業結束時強制執行緩衝區寫入。
OsFHandleOpen( FILE, $hNativeHandle, $sMode )
開啟一個 Perl 檔案控制代號,基於一個已經開啟的 Win32 原生檔案控制代號 [非常類似於 C 的 fdopen()
函式與檔案描述符的運作方式]。如果開啟操作成功,則傳回一個真值。如果失敗,則傳回一個假值,並將 $!
[以及可能還有 fileLastError()
和 $^E
] 設為失敗原因。
FILE
是 Perl 檔案控制代號 [採用任何支援的格式,一個裸字、一個字串、一個類型球體或一個類型球體的參考],將會被開啟。如果 FILE
已經開啟,則在重新開啟之前,它會自動關閉。
$hNativeHandle
是開啟的 Win32 原生檔案控制代號,可能是來自 CreateFile
或 createFile
的傳回值。
$sMode
是來自 "rwatb"
的零個或多個字母的字串。這些會轉換成 O_RDONLY
["r"
]、O_WRONLY
["w"
]、O_RDWR
["rw"
]、O_APPEND
["a"
]、O_TEXT
["t"
] 和 O_BINARY
["b"
] 旗標的組合 [請參閱 Fcntl 模組],這些旗標會傳遞給 OsFHandleOpenFd
。目前只有 O_APPEND
和 O_TEXT
有任何意義。
此外,$sMode
中的 "r"
和/或 "w"
用於決定檔案描述符如何轉換成 Perl 檔案控制代號,即使這似乎沒有造成任何差異。下列其中一個會被使用
open( FILE, "<&=".$ivFd ) # "r" w/o "w"
open( FILE, ">&=".$ivFd ) # "w" w/o "r"
open( FILE, "+<&=".$ivFd ) # both "r" and "w"
OsFHandleOpen
最終呼叫 Win32 特定的 C 常式 _open_osfhandle()
或 Perl 的「改良」版本,稱為 win32_open_osfhandle()
。在 Perl5.005 之前,會呼叫 C 的 _open_osfhandle()
,如果 GetFileType($hNativeHandle)
會傳回 FILE_TYPE_UNKNOWN
,則呼叫會失敗。對於 Perl5.005 和之後的版本,OsFHandleOpen
會從 Perl DLL 呼叫 win32_open_osfhandle()
,它沒有這個限制。
$ivFD= OsFHandleOpenFd( $hNativeHandle, $uMode )
開啟一個檔案描述符 [$ivFD
],基於一個已經開啟的 Win32 原生檔案控制代號 $hNativeHandle
。這只會呼叫 Win32 特定的 C 常式 _open_osfhandle()
或 Perl 的「改良」版本,稱為 win32_open_osfhandle()
。在 Perl5.005 之前和 Cygwin Perl 中,會呼叫 C 的 _open_osfhandle()
,如果 GetFileType($hNativeHandle)
會傳回 FILE_TYPE_UNKNOWN
,則呼叫會失敗。對於 Perl5.005 和之後的版本,OsFHandleOpenFd
會從 Perl DLL 呼叫 win32_open_osfhandle()
,它沒有這個限制。
$uMode
是 Fcntl
模組所匯出的零個或多個 O_*
常數的邏輯組合。目前只有 O_APPEND
和 O_TEXT
有任何意義。
如果開啟操作成功,$ivFD
將為非負值。如果失敗,則傳回 -1
,並將 $!
[以及可能的 fileLastError()
和 $^E
] 設為失敗原因。
$olTargetLen= QueryDosDevice( $sDosDeviceName, $osTargetPath, $lTargetBuf )
查詢指定的「DOS」裝置名稱的定義,產生目前的 Windows NT 原生裝置名稱,以及任何目前處於休眠狀態的定義。
$sDosDeviceName
是我們要取得其定義的「DOS」裝置名稱。例如,"C:"
、"COM1"
或 "PhysicalDrive0"
。如果 $sDosDeviceName
為 []
[對於 NULL
],則會傳回所有 DOS 裝置名稱的清單。
$osTargetPath
將會指定一個包含定義清單的字串。每個定義都以 '\0'
結束,並串聯到字串中,最近的定義在最前面,整個字串的結尾處有一個額外的 '\0'
[請參閱 GetLogicalDriveStrings
以取得此格式的範例]。
$lTargetBuf
是要為 $osTargetPath
分配的緩衝區大小 [以位元組為單位]。請參閱 "緩衝區大小" 以取得更多資訊。
$olTargetLen
設為寫入 $osTargetPath
的位元組數,但您也可以使用 length($osTargetPath)
來判斷這一點。
如果失敗,則傳回 0
,並將 fileLastError()
和 $^E
設為失敗原因。
ReadFile( $hFile, $opBuffer, $lBytes, $olBytesRead, $pOverlapped )
從檔案或類檔案裝置讀取位元組。如果讀取操作成功,則傳回 true 值。如果失敗,則傳回 false 值,並設定 fileLastError()
和 $^E
以表示失敗原因。
$hFile
是 Win32 原生檔案控制代碼,已開啟可供讀取的檔案或裝置。
$opBuffer
會設定為包含已讀取位元的字串。
$lBytes
是您想要讀取的位元組數。$opBuffer
會自動初始化為一個緩衝區,其大小足夠容納這麼多位元組。與其他緩衝區大小不同,$lBytes
不需要加上前置的 "="
,以防止將較大的值傳遞給底層 Win32 ReadFile
API。不過,即使已啟用 Perl 警告,前置的 "="
仍會被靜默忽略。
如果 $olBytesRead
不為 []
,它會設定為實際讀取的位元組數,不過也可以使用 length($opBuffer)
來判斷。
$pOverlapped
為 []
或打包為字串的 OVERLAPPED
結構。這只有在 $hFile
以設定 FILE_FLAG_OVERLAPPED
旗標開啟時才有用。
$uOldMode= SetErrorMode( $uNewMode )
設定控制系統錯誤處理的模式並傳回前一個模式值。$uOldMode
和 $uNewMode
都會設定下列其中一個或多個位元組
SEM_FAILCRITICALERRORS
如果設定,表示在遇到重大錯誤時,觸發錯誤的呼叫會立即失敗。通常這個位元組不會設定,這表示重大錯誤會導致對話方塊出現,通知桌面使用者某個應用程式已觸發重大錯誤。對話方塊允許桌面使用者決定是否將重大錯誤傳回程序、忽略,或重試有問題的操作。
這會影響 CreateFile
和 GetVolumeInformation
呼叫。
設定這個位元組有助於讓您檢查軟碟機中是否有軟碟。
SEM_NOALIGNMENTFAULTEXCEPT
如果設定,這會導致記憶體存取未對齊的錯誤以一種對程序不可見的方式自動修正。此旗標在基於 x86 的 Windows NT 版本中會被忽略。此旗標在 Windows 95 中不受支援。
SEM_NOGPFAULTERRORBOX
如果設定,一般保護錯誤不會產生對話框,但可以透過例外處理常式由程序處理。不瞭解如何處理此類錯誤的程式不應設定此位元。
SEM_NOOPENFILEERRORBOX
如果設定,則當嘗試繼續讀取或寫入已開啟的檔案 [通常在可移除式媒體上,例如磁碟片] 時發現檔案不再可用,呼叫會立即失敗。通常此位元未設定,這表示會出現對話框,通知桌面使用者某些應用程式遇到此問題。對話框允許桌面使用者決定是否將失敗傳回程序、忽略失敗或重試有問題的操作。
這會影響 ReadFile
和 WriteFile
呼叫。
$uNewPos = setFilePointer( $hFile, $ivOffset, $uFromWhere )
這是 SetFilePointer API (如下) 的 perl 友善包裝函式。如果您的 Perl 沒有 64 位元整數,$ivOffset
可以是 64 位元整數或 Math::BigInt
物件。傳回值是新的偏移量,同樣會是 64 位元整數或 Math::BigInt
物件。
$uNewPos = SetFilePointer( $hFile, $ivOffset, $ioivOffsetHigh, $uFromWhere )
seek()
的原生 Win32 版本。SetFilePointer
會設定檔案中下一次讀取或寫入作業將開始的位置。
$hFile
是原生 Win32 檔案控制代碼。
$uFromWhere
是 FILE_BEGIN
、FILE_CURRENT
或 FILE_END
,分別表示新的檔案位置是相對於檔案開頭、目前的檔案指標或檔案結尾指定。
$ivOffset
是 [如果 $ioivOffsetHigh
是 []
] 從 $uFromWhere
指定的位置到新檔案位置的偏移量 [以位元組為單位]。如果 $ioivOffsetHigh
不是 []
,則 $ivOffset
會轉換成未簽名的值,用作偏移量的低階 4 個位元組。
$ioivOffsetHigh
可以是 []
[表示 NULL
],表示您只指定 4 個位元組的偏移量,而產生的檔案位置會小於或等於 0xFFFFFFFE [略小於 4GB]。否則,$ioivOfffsetHigh
會從偏移量的最高階 4 個位元組 [已簽名] 開始,並設定為產生的檔案位置的 [未簽名] 最高階 4 個位元組。
底層的 SetFilePointer
會傳回 0xFFFFFFFF
表示失敗,但如果 $ioivOffsetHigh
不是 []
,您還必須檢查 $^E
,以確定 0xFFFFFFFF
是否表示錯誤。Win32API::File::SetFilePointer
會為您執行此檢查,並且只有在底層 SetFilePointer
失敗時才會傳回 false 值。因此,如果您將檔案指標設定到檔案開頭 [或低階 4 個位元組為 0 的任何位置],則 $uNewPos
會設定為 "0 但為 true"
。
因此,如果尋找作業成功,傳回值會為 true。如果失敗,會傳回 false 值,而 fileLastError()
和 $^E
會設定為失敗原因。
SetHandleInformation( $hObject, $uMask, $uFlags )
設定與原生 Win32 檔案控制代碼或物件控制代碼相關聯的旗標。如果作業成功,傳回 true 值。如果失敗,傳回 false 值,並設定 fileLastError()
和 $^E
,以表示失敗原因。
$hObject
是開啟的 Win32 原生檔案控制代碼或開啟的 Win32 原生控制代碼,用於其他類型的物件。
$uMask
是未簽名的值,設定其中一個或多個位元組 HANDLE_FLAG_INHERIT
和 HANDLE_FLAG_PROTECT_FROM_CLOSE
。SetHandleInformation
只會修改 $uMask
中設定的位元組。
$uFlags
是具有零個或多個已設定的位元 HANDLE_FLAG_INHERIT
和 HANDLE_FLAG_PROTECT_FROM_CLOSE
的未簽署值。對於 $uMask
中設定的每個位元,句柄旗標中的對應位元會設定為 $uFlags
中對應位元的數值。
如果 $uOldFlags
是呼叫 SetHandleInformation
之前的句柄旗標值,則呼叫之後句柄旗標的值會是
( $uOldFlags & ~$uMask ) | ( $uFlags & $uMask )
[至少在 HANDLE_FLAG_INHERIT
和 HANDLE_FLAG_PROTECT_FROM_CLOSE
位元相關的部分。]
請參閱 ":HANDLE_FLAG_"
匯出類別,以了解這些位元的意義。
WriteFile( $hFile, $pBuffer, $lBytes, $ouBytesWritten, $pOverlapped )
將位元組寫入檔案或類檔案裝置。如果操作成功,則傳回 true 值。如果失敗,則傳回 false 值,並設定 fileLastError()
和 $^E
,以說明失敗的原因。
$hFile
是 Win32 原生檔案控制代碼,已開啟要寫入的檔案或裝置。
$pBuffer
是包含要寫入位元組的字串。
$lBytes
是您想要寫入的位元組數。如果 $pBuffer
的長度小於 $lBytes
,WriteFile
會發生 croaks。您可以指定 0
給 $lBytes
,以寫入 length($pBuffer)
位元組。即使啟用 Perl 警告,$lBytes
上的開頭 "="
也會被自動忽略。
除非您將 $ouBytesWritten
指定為 []
,否則會將其設定為實際寫入的位元組數。
$pOverlapped
是 []
或封裝在字串中的 OVERLAPPED
結構。這只有在使用 FILE_FLAG_OVERLAPPED
旗標開啟 $hFile
時才有用。
":FuncA"
特定於 ASCII 的函式。每個函式都與沒有尾隨「A」的版本相同。
CopyFileA
CreateFileA
DefineDosDeviceA
DeleteFileA
GetDriveTypeA
GetFileAttributesA
GetLogicalDriveStringsA
GetVolumeInformationA
MoveFileA
MoveFileExA
QueryDosDeviceA
":FuncW"
寬字元專用 (Unicode) 函數。除了沒有尾碼「W」的版本外,這些函數都相同,但字串預期為 Unicode,而且某些長度會以 `WCHAR` 數量而非位元組數目測量,如下所示。
CopyFileW( $swOldFileName, $swNewFileName, $bFailIfExists )
$swOldFileName
和 $swNewFileName
是 Unicode 字串。
$swPath
是 Unicode。
DefineDosDeviceW( $uFlags, $swDosDeviceName, $swTargetPath )
$swDosDeviceName
和 $swTargetPath
是 Unicode。
DeleteFileW( $swFileName )
$swFileName
是 Unicode。
$uDriveType= GetDriveTypeW( $swRootPath )
$swRootPath
是 Unicode。
$uAttrs= GetFileAttributesW( $swPath )
$swPath
是 Unicode。
$olwOutLength= GetLogicalDriveStringsW( $lwBufSize, $oswBuffer )
Unicode 儲存在 $oswBuffer
中。$lwBufSize
和 $olwOutLength
測量為 `WCHAR` 數量。
GetVolumeInformationW( $swRootPath, $oswVolName, $lwVolName, $ouSerialNum, $ouMaxNameLen, $ouFsFlags, $oswFsType, $lwFsType )
$swRootPath
是 Unicode,而且 Unicode 會寫入 $oswVolName
和 $oswFsType
。$lwVolName
和 $lwFsType
測量為 `WCHAR` 數量。
MoveFileW( $swOldName, $swNewName )
$swOldName
和 $swNewName
是 Unicode。
MoveFileExW( $swOldName, $swNewName, $uFlags )
$swOldName
和 $swNewName
是 Unicode。
$olwTargetLen= QueryDosDeviceW( $swDeviceName, $oswTargetPath, $lwTargetBuf )
$swDeviceName
是 Unicode,Unicode 寫入 $oswTargetPath
。$lwTargetBuf
和 $olwTargetLen
以 WCHAR
數量衡量。
":Misc"
其他常數。用於 CreateFile
的 $uCreate
參數或 SetFilePointer
的 $uFromWhere
參數。加上 INVALID_HANDLE_VALUE
,通常不需要檢查,因為大多數例程會將其轉換為 false 值。
CREATE_ALWAYS CREATE_NEW OPEN_ALWAYS
OPEN_EXISTING TRUNCATE_EXISTING INVALID_HANDLE_VALUE
FILE_BEGIN FILE_CURRENT FILE_END
":DDD_"
DefineDosDevice
的 $uFlags
參數的常數。
DDD_EXACT_MATCH_ON_REMOVE
DDD_RAW_TARGET_PATH
DDD_REMOVE_DEFINITION
":DRIVE_"
GetDriveType
回傳的常數。
DRIVE_UNKNOWN DRIVE_NO_ROOT_DIR DRIVE_REMOVABLE
DRIVE_FIXED DRIVE_REMOTE DRIVE_CDROM
DRIVE_RAMDISK
":FILE_"
可透過 CreateFile
的 $uAccess
參數要求的特定檔案存取類型。
FILE_READ_DATA FILE_LIST_DIRECTORY
FILE_WRITE_DATA FILE_ADD_FILE
FILE_APPEND_DATA FILE_ADD_SUBDIRECTORY
FILE_CREATE_PIPE_INSTANCE FILE_READ_EA
FILE_WRITE_EA FILE_EXECUTE
FILE_TRAVERSE FILE_DELETE_CHILD
FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES
FILE_ALL_ACCESS FILE_GENERIC_READ
FILE_GENERIC_WRITE FILE_GENERIC_EXECUTE )],
":FILE_ATTRIBUTE_"
檔案屬性常數。由 attrLetsToBits
回傳,並用於 CreateFile
的 $uFlags
參數。
FILE_ATTRIBUTE_ARCHIVE FILE_ATTRIBUTE_COMPRESSED
FILE_ATTRIBUTE_HIDDEN FILE_ATTRIBUTE_NORMAL
FILE_ATTRIBUTE_OFFLINE FILE_ATTRIBUTE_READONLY
FILE_ATTRIBUTE_SYSTEM FILE_ATTRIBUTE_TEMPORARY
此外,GetFileAttributes
可以回傳這些常數(或在發生錯誤時回傳 INVALID_FILE_ATTRIBUTES)。
FILE_ATTRIBUTE_DEVICE FILE_ATTRIBUTE_DIRECTORY
FILE_ATTRIBUTE_ENCRYPTED FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
FILE_ATTRIBUTE_REPARSE_POINT FILE_ATTRIBUTE_SPARSE_FILE
":FILE_FLAG_"
檔案選項旗標常數。用於 CreateFile
的 $uFlags
參數。
FILE_FLAG_BACKUP_SEMANTICS FILE_FLAG_DELETE_ON_CLOSE
FILE_FLAG_NO_BUFFERING FILE_FLAG_OVERLAPPED
FILE_FLAG_POSIX_SEMANTICS FILE_FLAG_RANDOM_ACCESS
FILE_FLAG_SEQUENTIAL_SCAN FILE_FLAG_WRITE_THROUGH
FILE_FLAG_OPEN_REPARSE_POINT
":FILE_SHARE_"
檔案共用常數。用於 CreateFile
的 $uShare
參數。
FILE_SHARE_DELETE FILE_SHARE_READ FILE_SHARE_WRITE
":FILE_TYPE_"
檔案類型常數。由 GetFileType
傳回。
FILE_TYPE_CHAR FILE_TYPE_DISK
FILE_TYPE_PIPE FILE_TYPE_UNKNOWN
":FS_"
檔案系統特性常數。置於 GetVolumeInformation
的 $ouFsFlags
參數中。
FS_CASE_IS_PRESERVED FS_CASE_SENSITIVE
FS_UNICODE_STORED_ON_DISK FS_PERSISTENT_ACLS
FS_FILE_COMPRESSION FS_VOL_IS_COMPRESSED
":HANDLE_FLAG_"
修改物件控制代碼行為的旗標位元,並透過 GetHandleInformation
和 SetHandleInformation
存取。
":IOCTL_STORAGE_"
一般儲存裝置的 I/O 控制操作。用於 DeviceIoControl
的 $uIoControlCode
參數。包含 IOCTL_STORAGE_CHECK_VERIFY
、IOCTL_STORAGE_MEDIA_REMOVAL
、IOCTL_STORAGE_EJECT_MEDIA
、IOCTL_STORAGE_LOAD_MEDIA
、IOCTL_STORAGE_RESERVE
、IOCTL_STORAGE_RELEASE
、IOCTL_STORAGE_FIND_NEW_DEVICES
和 IOCTL_STORAGE_GET_MEDIA_TYPES
。
IOCTL_STORAGE_CHECK_VERIFY
驗證裝置的媒體是否可存取。$pInBuf
和 $opOutBuf
都應為 []
。如果 DeviceIoControl
傳回 true 值,則表示媒體目前可存取。
IOCTL_STORAGE_MEDIA_REMOVAL
允許鎖定或解鎖裝置的媒體。$opOutBuf
應為 []
。$pInBuf
應為 PREVENT_MEDIA_REMOVAL
資料結構,它只是一個包含布林值之整數
$pInBuf= pack( "i", $bPreventMediaRemoval );
IOCTL_STORAGE_EJECT_MEDIA
要求裝置退出媒體。$pInBuf
和 $opOutBuf
都應為 []
。
IOCTL_STORAGE_LOAD_MEDIA
要求裝置載入媒體。$pInBuf
和 $opOutBuf
都應為 []
。
IOCTL_STORAGE_RESERVE
要求保留裝置。$pInBuf
和 $opOutBuf
都應為 []
。
IOCTL_STORAGE_RELEASE
釋放先前的裝置保留。$pInBuf
和 $opOutBuf
都應為 []
。
IOCTL_STORAGE_FIND_NEW_DEVICES
未找到關於此 IOCTL 作業的文件。
IOCTL_STORAGE_GET_MEDIA_TYPES
要求裝置支援的媒體類型資訊。$pInBuf
應為 []
。$opOutBuf
將設定為包含 DISK_GEOMETRY
資料結構的向量,可透過下列方式解碼
# Calculate the number of DISK_GEOMETRY structures returned:
my $cStructs= length($opOutBuf)/(4+4+4+4+4+4);
my @fields= unpack( "L l I L L L" x $cStructs, $opOutBuf )
my( @ucCylsLow, @ivcCylsHigh, @uMediaType, @uTracksPerCyl,
@uSectsPerTrack, @uBytesPerSect )= ();
while( @fields ) {
push( @ucCylsLow, unshift @fields );
push( @ivcCylsHigh, unshift @fields );
push( @uMediaType, unshift @fields );
push( @uTracksPerCyl, unshift @fields );
push( @uSectsPerTrack, unshift @fields );
push( @uBytesPerSect, unshift @fields );
}
對於第 $i
個支援的媒體類型,下列變數將包含下列資料。
":IOCTL_DISK_"
磁碟裝置的 I/O 控制操作。用於 DeviceIoControl
的 $uIoControlCode
參數。其中大部分用於實體磁碟機裝置,例如 "//./PhysicalDrive0"
。不過,IOCTL_DISK_GET_PARTITION_INFO
和 IOCTL_DISK_SET_PARTITION_INFO
應該只用於單一磁碟分割裝置,例如 "//./C:"
。此外,IOCTL_DISK_GET_MEDIA_TYPES
已記載為已被取代,但用於軟碟機裝置,例如 "//./A:"
時仍然有用。
包括 IOCTL_DISK_FORMAT_TRACKS
、IOCTL_DISK_FORMAT_TRACKS_EX
、IOCTL_DISK_GET_DRIVE_GEOMETRY
、IOCTL_DISK_GET_DRIVE_LAYOUT
、IOCTL_DISK_GET_MEDIA_TYPES
、IOCTL_DISK_GET_PARTITION_INFO
、IOCTL_DISK_HISTOGRAM_DATA
、IOCTL_DISK_HISTOGRAM_RESET
、IOCTL_DISK_HISTOGRAM_STRUCTURE
、IOCTL_DISK_IS_WRITABLE
、IOCTL_DISK_LOGGING
、IOCTL_DISK_PERFORMANCE
、IOCTL_DISK_REASSIGN_BLOCKS
、IOCTL_DISK_REQUEST_DATA
、IOCTL_DISK_REQUEST_STRUCTURE
、IOCTL_DISK_SET_DRIVE_LAYOUT
、IOCTL_DISK_SET_PARTITION_INFO
和 IOCTL_DISK_VERIFY
。
IOCTL_DISK_GET_DRIVE_GEOMETRY
要求磁碟大小和結構的資訊。$pInBuf
應為 []
。$opOutBuf
將設定為 DISK_GEOMETRY
資料結構,可透過下列方式進行解碼
( $ucCylsLow, $ivcCylsHigh, $uMediaType, $uTracksPerCyl,
$uSectsPerTrack, $uBytesPerSect )= unpack( "L l I L L L", $opOutBuf );
IOCTL_DISK_GET_PARTITION_INFO
要求有關磁碟分割大小和幾何形狀的資訊。$pInBuf
應為 []
。$opOutBuf
將設定為 PARTITION_INFORMATION
資料結構,可透過下列方式進行解碼
( $uStartLow, $ivStartHigh, $ucHiddenSects, $uPartitionSeqNumber,
$uPartitionType, $bActive, $bRecognized, $bToRewrite )=
unpack( "L l L L C c c c", $opOutBuf );
$uStartLow
和 $ivStartHigh
磁碟分割開始偏移量的低位元組和高位元組 [分別] 4 位元組,以位元組為單位量測。
$ucHiddenSects
此磁碟分割的「隱藏」扇區數目。實際上,這是此磁碟分割之前的扇區數目,亦即開始偏移量 [如 $uStartLow
和 $ivStartHigh
所示] 除以每扇區的位元組數目。
$uPartitionSeqNumber
此磁碟分割的順序號碼。磁碟分割從 1
開始編號 [「磁碟分割 0」表示整個磁碟]。有時此欄位可能是 0
,您必須從磁碟上在它之前有多少個磁碟分割來推論磁碟分割順序號碼。
$uPartitionType
磁碟分割類型。請參閱 ":PARTITION_"
匯出類別以取得已知類型的清單。另請參閱 IsRecognizedPartition
和 IsContainerPartition
。
$bActive
如果是活動 [開機] 磁碟分割,則為 1
,否則為 0
。
$bRecognized
此類型的分割是否支援 Win32。
$bToRewrite
是否更新此分割資訊。IOCTL_DISK_GET_PARTITION_INFO
未使用此欄位。對於 IOCTL_DISK_SET_DRIVE_LAYOUT
,您必須將此欄位設定為您希望變更、新增或刪除的任何分割的 true 值。
IOCTL_DISK_SET_PARTITION_INFO
變更分割類型。$opOutBuf
應為 []
。$pInBuf
應為 SET_PARTITION_INFORMATION
資料結構,只是一個包含新分割類型的單一位元組 [請參閱 ":PARTITION_"
匯出類別以取得已知類型的清單]
$pInBuf= pack( "C", $uPartitionType );
IOCTL_DISK_GET_DRIVE_LAYOUT
要求有關磁碟配置的資訊。$pInBuf
應為 []
。$opOutBuf
將設定為包含 DRIVE_LAYOUT_INFORMATION
結構,其中包含多個 PARTITION_INFORMATION
結構
my( $cPartitions, $uDiskSignature )= unpack( "L L", $opOutBuf );
my @fields= unpack( "x8" . ( "L l L L C c c c" x $cPartitions ),
$opOutBuf );
my( @uStartLow, @ivStartHigh, @ucHiddenSects,
@uPartitionSeqNumber, @uPartitionType, @bActive,
@bRecognized, @bToRewrite )= ();
for( 1..$cPartition ) {
push( @uStartLow, unshift @fields );
push( @ivStartHigh, unshift @fields );
push( @ucHiddenSects, unshift @fields );
push( @uPartitionSeqNumber, unshift @fields );
push( @uPartitionType, unshift @fields );
push( @bActive, unshift @fields );
push( @bRecognized, unshift @fields );
push( @bToRewrite, unshift @fields );
}
$cPartitions
如果磁碟上的分割數。
$uDiskSignature
是磁碟簽章,由磁碟管理員 [WinDisk.exe] 指定的唯一編號,用於識別磁碟。這允許該磁碟上分割的磁碟機代號保持不變,即使磁碟的 SCSI 目標 ID 已變更。
請參閱 IOCTL_DISK_GET_PARTITION_INFORMATION
以取得有關這些欄位的剩餘資訊。
IOCTL_DISK_GET_MEDIA_TYPES
應由 IOCTL_STORAGE_GET_MEDIA_TYPES
取代,但仍可協助判斷特定磁碟機可產生的軟碟格式類型。請參閱 ex/FormatFloppy.plx 以取得範例。
IOCTL_DISK_SET_DRIVE_LAYOUT
變更磁碟的分割配置。$pOutBuf
應為 []
。$pInBuf
應為 DISK_LAYOUT_INFORMATION
資料結構,其中包含多個 PARTITION_INFORMATION
資料結構。
# Already set: $cPartitions, $uDiskSignature, @uStartLow, @ivStartHigh,
# @ucHiddenSects, @uPartitionSeqNumber, @uPartitionType, @bActive,
# @bRecognized, and @bToRewrite.
my( @fields, $prtn )= ();
for $prtn ( 1..$cPartition ) {
push( @fields, $uStartLow[$prtn-1], $ivStartHigh[$prtn-1],
$ucHiddenSects[$prtn-1], $uPartitionSeqNumber[$prtn-1],
$uPartitionType[$prtn-1], $bActive[$prtn-1],
$bRecognized[$prtn-1], $bToRewrite[$prtn-1] );
}
$pInBuf= pack( "L L" . ( "L l L L C c c c" x $cPartitions ),
$cPartitions, $uDiskSignature, @fields );
若要刪除分割,請將所有欄位歸零,但 $bToRewrite
例外,應設定為 1
。若要新增分割,請增加 $cPartitions
,並將新分割的資訊新增至陣列中,請務必將 1
插入 @bToRewrite。
請參閱 IOCTL_DISK_GET_DRIVE_LAYOUT
和 IOCTL_DISK_GET_PARITITON_INFORMATION
以取得欄位的說明。
IOCTL_DISK_VERIFY
執行磁碟 [部分] 的邏輯格式化。$opOutBuf
應為 []
。$pInBuf
應包含 VERIFY_INFORMATION
資料結構
$pInBuf= pack( "L l L",
$uStartOffsetLow, $ivStartOffsetHigh, $uLength );
IOCTL_DISK_FORMAT_TRACKS
格式化磁碟上的一系列磁軌。$opOutBuf
應為 []
。$pInBuf
應包含 FORMAT_PARAMETERS
資料結構
$pInBuf= pack( "L L L L L", $uMediaType,
$uStartCyl, $uEndCyl, $uStartHead, $uEndHead );
$uMediaType
如果要格式化的媒體類型。主要用於指定格式化軟碟時要使用的密度。有關更多資訊,請參閱 ":MEDIA_TYPE"
匯出類別。
其餘欄位指定要格式化的磁軌範圍的起始和結束磁柱和磁頭。
IOCTL_DISK_REASSIGN_BLOCKS
將磁碟區塊清單重新指定給磁碟的備用區塊池。$opOutBuf
應為 []
。$pInBuf
應為 REASSIGN_BLOCKS
資料結構
$pInBuf= pack( "S S L*", 0, $cBlocks, @uBlockNumbers );
IOCTL_DISK_PERFORMANCE
要求有關磁碟效能的資訊。$pInBuf
應為 []
。$opOutBuf
將設定為包含 DISK_PERFORMANCE
資料結構
my( $ucBytesReadLow, $ivcBytesReadHigh,
$ucBytesWrittenLow, $ivcBytesWrittenHigh,
$uReadTimeLow, $ivReadTimeHigh,
$uWriteTimeLow, $ivWriteTimeHigh,
$ucReads, $ucWrites, $uQueueDepth )=
unpack( "L l L l L l L l L L L", $opOutBuf );
IOCTL_DISK_IS_WRITABLE
未找到關於此 IOCTL 作業的文件。
IOCTL_DISK_LOGGING
控制磁碟記錄。對於此 IOCTL 操作,找到的說明文件很少。它使用 DISK_LOGGING
資料結構
開始記錄磁碟裝置驅動程式內部緩衝區中的每個磁碟要求,大小為 $uLogBufferSize
$pInBuf= pack( "C L L", 0, 0, $uLogBufferSize );
停止記錄每個磁碟要求
$pInBuf= pack( "C L L", 1, 0, 0 );
將內部記錄複製到提供的緩衝區中
$pLogBuffer= ' ' x $uLogBufferSize
$pInBuf= pack( "C P L", 2, $pLogBuffer, $uLogBufferSize );
( $uByteOffsetLow[$i], $ivByteOffsetHigh[$i],
$uStartTimeLow[$i], $ivStartTimeHigh[$i],
$uEndTimeLog[$i], $ivEndTimeHigh[$i],
$hVirtualAddress[$i], $ucBytes[$i],
$uDeviceNumber[$i], $bWasReading[$i] )=
unpack( "x".(8+8+8+4+4+1+1+2)." L l L l L l L L C c x2", $pLogBuffer );
根據要求大小將統計資料分組到 bin 中。
$pInBuf= pack( "C P L", 3, $pUnknown, $uUnknownSize );
IOCTL_DISK_FORMAT_TRACKS_EX
未包含此 IOCTL 的說明文件。
IOCTL_DISK_HISTOGRAM_STRUCTURE
未包含此 IOCTL 的說明文件。
IOCTL_DISK_HISTOGRAM_DATA
未包含此 IOCTL 的說明文件。
IOCTL_DISK_HISTOGRAM_RESET
未包含此 IOCTL 的說明文件。
IOCTL_DISK_REQUEST_STRUCTURE
未找到關於此 IOCTL 作業的文件。
IOCTL_DISK_REQUEST_DATA
未找到關於此 IOCTL 作業的文件。
":FSCTL_"
檔案系統控制操作。用於 DeviceIoControl
的 $uIoControlCode
參數中。
包含 FSCTL_SET_REPARSE_POINT
、FSCTL_GET_REPARSE_POINT
、FSCTL_DELETE_REPARSE_POINT
。
":GENERIC_"
指定不特定於一種物件類型的常數,用於指定一般存取權限。
GENERIC_ALL GENERIC_EXECUTE
GENERIC_READ GENERIC_WRITE
":MEDIA_TYPE"
裝置可以支援的不同類別媒體。用於 DISK_GEOMETRY
結構的 $uMediaType
欄位中。
Unknown
格式不明。
F5_1Pt2_512
5.25" 軟碟,1.2MB [實際上為 1,200KB] 總空間,每扇區 512 位元組。
F3_1Pt44_512
3.5" 軟碟,1.44MB [實際上為 1,440KB] 總空間,每扇區 512 位元組。
F3_2Pt88_512
3.5" 軟碟,2.88MB [實際上為 2,880KB] 總空間,每扇區 512 位元組。
F3_20Pt8_512
3.5" 軟碟,20.8MB 總空間,每扇區 512 位元組。
F3_720_512
3.5" 軟碟,720KB 總空間,每扇區 512 位元組。
F5_360_512
5.25" 軟碟,360KB 總空間,每扇區 512 位元組。
F5_320_512
5.25" 軟碟,320KB 總空間,每扇區 512 位元組。
F5_320_1024
5.25" 軟碟,320KB 總空間,每扇區 1024 位元組。
F5_180_512
5.25" 軟碟,180KB 總空間,每扇區 512 位元組。
F5_160_512
5.25" 軟碟,160KB 總空間,每扇區 512 位元組。
RemovableMedia
軟碟以外的可移除媒體類型。
FixedMedia
固定硬碟。
F3_120M_512
3.5" 軟碟,120MB 總空間。
":MOVEFILE_"
常數,用於 MoveFileEx
中 $uFlags
引數。
MOVEFILE_COPY_ALLOWED MOVEFILE_DELAY_UNTIL_REBOOT
MOVEFILE_REPLACE_EXISTING MOVEFILE_WRITE_THROUGH
":SECURITY_"
安全性服務品質值,如果開啟命名管道的用戶端,可以使用 CreateFile
中的 $uFlags
引數。
SECURITY_ANONYMOUS SECURITY_CONTEXT_TRACKING
SECURITY_DELEGATION SECURITY_EFFECTIVE_ONLY
SECURITY_IDENTIFICATION SECURITY_IMPERSONATION
SECURITY_SQOS_PRESENT
":SEM_"
與 SetErrorMode
搭配使用的常數。
SEM_FAILCRITICALERRORS SEM_NOGPFAULTERRORBOX
SEM_NOALIGNMENTFAULTEXCEPT SEM_NOOPENFILEERRORBOX
":PARTITION_"
描述分割區類型的常數。
PARTITION_ENTRY_UNUSED PARTITION_FAT_12
PARTITION_XENIX_1 PARTITION_XENIX_2
PARTITION_FAT_16 PARTITION_EXTENDED
PARTITION_HUGE PARTITION_IFS
PARTITION_FAT32 PARTITION_FAT32_XINT13
PARTITION_XINT13 PARTITION_XINT13_EXTENDED
PARTITION_PREP PARTITION_UNIX
VALID_NTFT PARTITION_NTFT
":STD_HANDLE_"
GetStdHandle 和 SetStdHandle 的常數
STD_ERROR_HANDLE
STD_INPUT_HANDLE
STD_OUTPUT_HANDLE
":ALL"
以上所有。
目前沒有已知的錯誤。
Tye McQueen,tye@metronet.com,http://perlmonks.org/?node=tye。
金字塔。