日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 充電吧
[導(dǎo)讀]?這個(gè)函數(shù)可以創(chuàng)建或打開一個(gè)對(duì)象的句柄,憑借此句柄就可以控制這些對(duì)象:控制臺(tái)對(duì)象、通信資源對(duì)象、目錄對(duì)象(只能打開)、磁盤設(shè)備對(duì)象、文件對(duì)象、郵槽對(duì)象、管道對(duì)象。??? 函數(shù)原型:1?????HAND

?這個(gè)函數(shù)可以創(chuàng)建或打開一個(gè)對(duì)象的句柄,憑借此句柄就可以控制這些對(duì)象:
控制臺(tái)對(duì)象、通信資源對(duì)象、目錄對(duì)象(只能打開)、磁盤設(shè)備對(duì)象、文件對(duì)象、郵槽對(duì)象、管道對(duì)象。
??? 函數(shù)原型:

1?????HANDLE?CreateFile(
2?????????LPCTSTR?lpFileName,?????????????????????????//?文件名
3?????????DWORD?dwDesiredAccess,??????????????????????//?訪問(wèn)模式
4?????????DWORD?dwShareMode,??????????????????????????//?共享模式
5?????????LPSECURITY_ATTRIBUTES?lpSecurityAttributes,?//?安全屬性(也即銷毀方式)
6?????????DWORD?dwCreationDisposition,????????????????//?how?to?create
7?????????DWORD?dwFlagsAndAttributes,?????????????????//?文件屬性
8?????????HANDLE?hTemplateFile????????????????????????//?模板文件句柄
9?????????);

?

【參數(shù)】
1、lpFileName
??? 一個(gè)指向無(wú)終結(jié)符的字符串的指針,來(lái)指明要?jiǎng)?chuàng)建或打開的對(duì)象的名字。
??? 在Windows NT/2000/XP平臺(tái)上:如果用ANSI版本的函數(shù),字符串長(zhǎng)度應(yīng)限制在MAX_PATH;如果用Unicode版本的函數(shù),這個(gè)限制可以擴(kuò)充到32000個(gè)Unicode字符。
??? 在Windows95/98/Me平臺(tái)上:只能用ANSI版本的函數(shù),字符串長(zhǎng)度限制在MAX_PATH。

2、dwDesiredAccess
??? 指明對(duì)象的控制模式。一個(gè)應(yīng)用程序可以包含讀控制、寫控制、讀/寫控制、設(shè)備查詢控制。
這個(gè)參數(shù)的取值可以是下面這些的組合:
??? 0???????????????????????????????????????????? 指定設(shè)備查詢控制:程序可以不訪問(wèn)設(shè)備就查詢到設(shè)備屬性。
??? GENERIC_READ??????????????? 指定讀控制,可以從對(duì)象中讀取數(shù)據(jù)(指針將可以移動(dòng))。
??? GENERIC_WRITE?????????????? 指定寫控制,可以向?qū)ο笾袑憯?shù)據(jù)(指針將可以移動(dòng))。
??? ----------------------------------------------------------------------
??? 另外,還可以指定下面的控制標(biāo)志:
標(biāo)準(zhǔn)控制權(quán)限(16-23位掩碼):
??? DELETE???????????????????? 刪除對(duì)象的權(quán)限。
??? READ_CONTROL??? 從對(duì)象的安全描述符中讀取信息的權(quán)限,但不包括SACL(系統(tǒng)訪問(wèn)控制列表)中的信息。
??? WRITE_DAC????????????? 修改對(duì)象安全描述符中的DACL(隨機(jī)訪問(wèn)控制列表)的權(quán)限
??? WRITE_OWNER????? 修改對(duì)象安全描述符中的屬主的權(quán)限
??? SYNCHRONIZE???? 同步化使用對(duì)象的權(quán)限,即可以創(chuàng)建一個(gè)線程等待信號(hào)量釋放(但有些對(duì)象不支持這個(gè)權(quán)限)。
??? STANDARD_RIGHTS_REQUIRED??? 等價(jià)于前面四種權(quán)限的總合(通常這四種是必須具有的權(quán)限)。
??? STANDARD_RIGHTS_READ??????? 一般等價(jià)于READ_CONTROL
??? STANDARD_RIGHTS_WRITE?????? 一般等價(jià)于READ_CONTROL
??? STANDARD_RIGHTS_EXECUTE???? 一般等價(jià)于READ_CONTROL
??? STANDARD_RIGHTS_ALL???????? 等價(jià)于前面五種權(quán)限的總合。
特殊控制權(quán)限(0-15位掩碼):
??? SPECIFIC_RIGHTS_ALL
??? ACCESS_SYSTEM_SECURITY
??? MAXIMUM_ALLOWED
??? GENERIC_READ
??? GENERIC_WRITE
??? GENERIC_EXECUTE
??? GENERIC_ALL?
注:實(shí)質(zhì)上是通過(guò)ACCESS_MASK結(jié)構(gòu)體的一個(gè)雙字值來(lái)設(shè)置標(biāo)準(zhǔn)權(quán)限、特殊權(quán)限和一般權(quán)限的。

3、dwShareMode
??? 指定對(duì)象的共享模式。如果dwShareMode==0,表示是互斥使用的。如果CreateFile打開成功,則別的程序只能等到當(dāng)前程序關(guān)閉對(duì)象句柄CloseHandle后才能在打開或使用。
??? 使用下面這些值的組合來(lái)表示對(duì)象的共享模式:
??? FILE_SHARE_DELETE?????? Windows NT/2000/XP:打開操作只有在刪除請(qǐng)求發(fā)生時(shí)才能返回成功。
??? FILE_SHARE_READ???????????????? 打開操作只有在讀控制請(qǐng)求發(fā)生時(shí)才能返回成功。
??? FILE_SHARE_WRITE??????????????? 打開操作只有在寫控制請(qǐng)求發(fā)生時(shí)才能返回成功。

4、lpSecurityAttributes
??? 一個(gè)指向SECURITY_ATTRIBUTES結(jié)構(gòu)對(duì)象的指針,決定返回的句柄是否被子進(jìn)程所繼承。如果lpSecurityAttributes參數(shù)為NULL,句柄就不能被子進(jìn)程繼承。
??? 在Windows NT/2000/XP平臺(tái)下:lpSecurityDescriptor這個(gè)成員指明了這個(gè)對(duì)象的安全描述符。如果lpSecurityAttributes參數(shù)為NULL,對(duì)象將獲得一個(gè)默認(rèn)的安全描述符。目標(biāo)文件系統(tǒng)必須為這個(gè)參數(shù)的在文件上的有效操作保證安全性。

1?typedef?struct?_SECURITY_ATTRIBUTES?{?
2???????DWORD?nLength;?//結(jié)構(gòu)體的大小(字節(jié)為單位),即siziof(SECURITY_ATTRIBUTES)
3???????LPVOID?lpSecurityDescriptor;?//指向?qū)ο蟮陌踩枋龇闹羔槪刂茖?duì)象的共享屬性。在Windows?95/98/Me平臺(tái)?????????????????????????????????????????????????????//上這個(gè)成員被忽略。
4???????BOOL???bInheritHandle;?//指明當(dāng)一個(gè)新的子進(jìn)程創(chuàng)建時(shí),是否繼承當(dāng)前返回的句柄
5?}?SECURITY_ATTRIBUTES,?*PSECURITY_ATTRIBUTES;

?

5、dwCreationDisposition
??? 指明當(dāng)打開的對(duì)象存在或不存在的時(shí)候各需怎樣處理。這個(gè)參數(shù)必須是一下值的其中之一:
??? CREATE_NEW??????????? 創(chuàng)建新文件/對(duì)象(當(dāng)對(duì)象已經(jīng)存在是將返回失敗)。
??? CREATE_ALWAYS???????? 總是創(chuàng)建(如果對(duì)象存在就覆蓋它,清除當(dāng)前屬性,把文件屬性和dwFlagsAndAttributes指定的標(biāo)志相結(jié)合)。
??? OPEN_EXISTING???????? 打開文件(如果不存在就返回失敗)。
??? OPEN_ALWAYS????? 存在就打開;若不存在,假如dwCreationDisposition==CREATE_NEW就創(chuàng)建一個(gè)新文件。
??? TRUNCATE_EXISTING???? 存在就打開,且清空文件內(nèi)容(至少要有GENERIC_WRITE權(quán)限);若文件不存在就返回失敗。

6、dwFlagsAndAttributes
??? 指定文件屬性和標(biāo)志。可以是以下值的任意組合(只有FILE_ATTRIBUTE_NORMAL必須單獨(dú)使用,唯一例外):
Attribute:
??? FILE_ATTRIBUTE_ARCHIVE???????????????? 文件存檔(備份或移動(dòng)時(shí)會(huì)對(duì)文件做標(biāo)記)。
??? FILE_ATTRIBUTE_ENCRYPTED?????????????? 加密(對(duì)文件來(lái)說(shuō)是內(nèi)容加密,對(duì)目錄來(lái)說(shuō)是對(duì)將來(lái)新建的文件默認(rèn)為加密屬性),與此同時(shí),如果還設(shè)置了FILE_ATTRIBUTE_SYSTEM屬性,當(dāng)前這個(gè)屬性將無(wú)效。
??? FILE_ATTRIBUTE_HIDDEN????????????????? 隱藏屬性。
??? FILE_ATTRIBUTE_NORMAL????????????????? 文件沒有其他屬性設(shè)置,此屬性只能單獨(dú)使用才合法。
??? FILE_ATTRIBUTE_NOT_CONTENT_INDEXED???? 不建立內(nèi)容索引。
??? FILE_ATTRIBUTE_OFFLINE???????????????? 脫機(jī)屬性。文件內(nèi)容暫時(shí)不可用。此屬性被Remote Storage軟件所用,不能任意更改。
??? FILE_ATTRIBUTE_READONLY??????????????? 只讀文件屬性。應(yīng)用程序不能寫或刪除。
??? FILE_ATTRIBUTE_SYSTEM????????????????? 文件是系統(tǒng)文件或被操作系統(tǒng)互斥地使用。
??? FILE_ATTRIBUTE_TEMPORARY?????????????? 臨時(shí)文件,使用過(guò)程中盡量留在內(nèi)存以保證存取速度。
Flag:
??? FILE_FLAG_WRITE_THROUGH??????????? 指示系統(tǒng)立即寫磁盤。這個(gè)寫操作允許被cache緩存,但不能被擱置。
??? FILE_FLAG_OVERLAPPED?????????????????? 指示系統(tǒng)初始化對(duì)象,如果操作需要大量時(shí)間執(zhí)行就先返回一 個(gè) ERROR_IO_PENDING,當(dāng)操作 完成后再通過(guò)事件使能信號(hào)量。指定這個(gè)標(biāo)志就必須在read和write函數(shù)里初始化OVERLAPPED 結(jié)構(gòu)體,應(yīng)用程序必須執(zhí)行重復(fù)的讀寫操作。此時(shí),操作系統(tǒng)不維護(hù)文件指針,當(dāng)前的位置?? 需要通過(guò)OVERLAPPED的指針傳遞給讀寫函數(shù)。這個(gè)標(biāo)志還允許多個(gè)操作的并行(并行讀寫)。
??? FILE_FLAG_NO_BUFFERING???????????????? 指示系統(tǒng)不要緩沖,它如果和FILE_FLAG_OVERLAPPED聯(lián)合使用,將呈現(xiàn)最好的異步性能,因?yàn)镮/O操作并不依賴于內(nèi)存管理器的同步性。但是有時(shí)I/O操作會(huì)慢些,因?yàn)闆]用cache。有時(shí)程序需要做調(diào)整,比如文件大小必須是扇區(qū)大小的整數(shù)倍,Buffer地址的按扇區(qū)地址對(duì)齊等。按扇區(qū)地址對(duì)齊內(nèi)存邊界可以使用VirtualAlloc來(lái)分配內(nèi)存,GerDiskFreeSpace函數(shù)可以得到磁盤一個(gè)扇區(qū)的大小。
??? FILE_FLAG_RANDOM_ACCESS??????????????? 指示文件進(jìn)行隨即存取,系統(tǒng)可據(jù)此對(duì)cache的分配進(jìn)行優(yōu)化。
??? FILE_FLAG_SEQUENTIAL_SCAN????????????? 指示順序存取,系統(tǒng)也可據(jù)此對(duì)cache的分配進(jìn)行優(yōu)化。即使有隨即存取的操作,也不會(huì)出錯(cuò),不過(guò)cache的優(yōu)化就取消了。在連續(xù)讀取大文件時(shí)性能非常好。
??? FILE_FLAG_DELETE_ON_CLOSE????????????? 指示系統(tǒng)在句柄關(guān)閉時(shí)將響應(yīng)的文件立即刪除,對(duì)當(dāng)前句柄以外的其他句柄也有效。而且隨后的打開請(qǐng)求也會(huì)失敗,直到你使用了FILE_SHARE_DELETE屬性。
??? FILE_FLAG_BACKUP_SEMANTICS???????????? 在Windows NT/2000/XP平臺(tái)上:指示文件作為備份或恢復(fù)文件打開,這是如果調(diào)用進(jìn)程擁有特殊權(quán)限(SE_BACKUP_NAME 或 SE_RESTORE_NAME),就可以不進(jìn)行安全檢查。也可以在獲得一個(gè)目錄的句柄時(shí)設(shè)置這個(gè)flag,目錄句柄可以代替文件句柄傳遞給一些函數(shù)。
??? FILE_FLAG_POSIX_SEMANTICS????????????? 指明按照操作系統(tǒng)接口規(guī)范進(jìn)行文件存取,這包括允許多文件名的使用。請(qǐng)謹(jǐn)慎使用,因?yàn)镸S_DOS或16位Windows系統(tǒng)可能不支持。
??? FILE_FLAG_OPEN_REPARSE_POINT?????????? 這個(gè)標(biāo)志指明禁止文件系統(tǒng)的重解析點(diǎn)的動(dòng)作。文件打開時(shí)就返回文件的句柄,而不在乎控制重解析點(diǎn)的過(guò)濾器是否可運(yùn)行。不能和CREATE_ALWAYS同時(shí)使用。
??? FILE_FLAG_OPEN_NO_RECALL?????????????? 表明文件數(shù)據(jù)被請(qǐng)求,但仍然駐留在遠(yuǎn)程存儲(chǔ)體中,而不會(huì)被傳回本地存儲(chǔ)體。這個(gè)標(biāo)志 由遠(yuǎn)程存儲(chǔ)系統(tǒng)或分層存儲(chǔ)管理系統(tǒng)使用。
??? 如果CreateFile函數(shù)打開一個(gè)命名管道的客戶端,dwFlagsAndAttributes 參數(shù)也會(huì)包含服務(wù)信息的安全性。當(dāng)調(diào)用程序指定了
SECURITY_PRESENT標(biāo)志時(shí),dwFlagsAndAttributes 參數(shù)可以取以下一個(gè)或多個(gè)值:
??? SECURITY_ANONYMOUS????????????????? 指定將客戶端模擬在匿名級(jí)別(the Anonymous impersonation level)
??? SECURITY_IDENTIFICATION???????????? 指定將客戶端模擬在身份認(rèn)證級(jí)別(the Identification impersonation level)
??? SECURITY_IMPERSONATION????????????? 指定將客戶端模擬在偽裝級(jí)別(the Impersonation impersonation level)
??? SECURITY_DELEGATION???????????????? 指定將客戶端模擬在授權(quán)級(jí)別(the Delegation impersonation level)
??? SECURITY_CONTEXT_TRACKING?????????? 指定安全跟蹤模式是動(dòng)態(tài)的,否則(不指定此標(biāo)志)是靜態(tài)的
??? SECURITY_EFFECTIVE_ONLY???????????? 指定客戶端的安全內(nèi)容中的有效內(nèi)容才可以被服務(wù)端使用,否則所有內(nèi)容都可被使用。 這個(gè)標(biāo)志允許客戶端限制服務(wù)端在模擬客戶端時(shí)所具有的權(quán)限。

7、hTemplateFile
??? 把具有GENERIC_READ權(quán)限的句柄指定為一個(gè)模板文件。這個(gè)模板文件提供了文件屬性和擴(kuò)展屬性,用于創(chuàng)建文件。在Windows95/98/Me平臺(tái)上:這個(gè)參數(shù)必須為空,否則如果你提供一個(gè)句柄,函數(shù)調(diào)用將會(huì)失敗,用GerLastError函數(shù)獲得的出錯(cuò)信息為ERROR_NOT_SUPPORTED。

【Return Values】
??? 調(diào)用如果成功,返回值時(shí)一個(gè)打開文件的句柄。
??? 如果調(diào)用之前文件已存在,且dwCreationDisposetion 為CREATE_ALWAYS或OPEN_ALWAYS,用GetLastError返回ERROR_ALREADY_EXISTS。
(即使調(diào)用成功也會(huì)返回這個(gè)值)。如果調(diào)用之前不存在,GetLastError返回0。
??? 調(diào)用如果失敗,返回值是INVALID_HANDLE_VALUE。要進(jìn)一步了解出錯(cuò)原因,調(diào)用GetLastError。
????
【備注】
??? 在Windows 2000/XP平臺(tái)上:
??? 如果你企圖打開一個(gè)遠(yuǎn)程機(jī)器上的文件或目錄,dwDesiredAccess設(shè)置為DELETE或者任一其他的控制標(biāo)志,
而這時(shí)遠(yuǎn)程文件或目錄還沒有以FILE_SHARE_DELETE的方式打開的話,你的函數(shù)調(diào)用就會(huì)發(fā)生共享錯(cuò)誤了。
為了避免共享錯(cuò)誤,一種辦法是單獨(dú)用DELETE方式打開遠(yuǎn)程文件或目錄,另一種方法是在打開文件或目錄之前先調(diào)用DeleteFile函數(shù)。
??? 如果dwCreationDisposition 參數(shù)指定為CREATE_ALWAYS 并且dwFlagsAndAttributes 參數(shù)指定為FILE_ATTRIBUTE_NORMAL 的話,CreateFile調(diào)用將失敗,GetLastError報(bào)告的錯(cuò)誤是ACCESS_DENIED。這時(shí),把dwFlagsAndAttributes 參數(shù)設(shè)置為FILE_ATTRIBUTE_HIDDEN和FILE_ATTRIBUTE_NORMAL的聯(lián)合值,將避免這個(gè)問(wèn)題。

二、*****CloseHandle*****
??? 用于關(guān)掉一個(gè)打開的對(duì)象句柄。
??? 函數(shù)原型:

1?BOOL?CloseHandle(
2???????HANDLE?hObject???//?句柄
3?);

?

【返回值】
??? 函數(shù)調(diào)用成功返回非零,失敗返回0。獲得更多錯(cuò)誤信息,需要調(diào)用GetLastError函數(shù)。
??? 在Windows NT/2000/XP平臺(tái)上:當(dāng)應(yīng)用程序在調(diào)試器下運(yùn)行時(shí),關(guān)閉一個(gè)不合法的句柄將產(chǎn)生一個(gè)異常(Exception)。包括兩次關(guān)閉同一個(gè)句柄,或者試圖關(guān)閉一個(gè)由FindFirstFile函數(shù)返回的句柄,都會(huì)產(chǎn)生異常。

【備注】
??? CloseHandle使指定的句柄無(wú)效,減少對(duì)象的句柄計(jì)數(shù),進(jìn)行對(duì)象保持檢驗(yàn)。當(dāng)對(duì)象的最后一個(gè)句柄關(guān)閉時(shí),對(duì)象將從系統(tǒng)中刪除。關(guān)閉一個(gè)線程句柄并不會(huì)終止一個(gè)線程,要釋放一個(gè)線程對(duì)象,必須terminate線程,然后關(guān)閉所有的線程句柄。用CloseHandle只能關(guān)閉由CreateFile函數(shù)返回的句柄。用FindClose來(lái)關(guān)閉由FindFirstFile返回的句柄。

三、*****ReadFile*****
??? ReadFile函數(shù)從文件指針指定的位置讀取數(shù)據(jù)。讀操作完成后,文件指針將根據(jù)實(shí)際讀出的數(shù)據(jù)自動(dòng)進(jìn)行調(diào)整,除非文件句柄是以O(shè)VERLAPPED屬性值打開的。如果是以O(shè)VERLAPPED打開的I/O,應(yīng)用程序就需要自己手動(dòng)調(diào)整文件指針。
??? 這個(gè)函數(shù)被設(shè)計(jì)成兼有同步和異步操作。ReadFileEx函數(shù)則設(shè)計(jì)成只支持異步操作,異步操作允許應(yīng)用程序在讀文件期間可以同時(shí)進(jìn)行其他的操作。
??? 函數(shù)原型:

1?BOOL?ReadFile(
2???????HANDLE?hFile,????????????????//?handle?to?file
3???????LPVOID?lpBuffer,?????????????//?data?buffer
4????????DWORD?nNumberOfBytesToRead,?//?number?of?bytes?to?read
5???????LPDWORD?lpNumberOfBytesRead,?//?number?of?bytes?read
6???????LPOVERLAPPED?lpOverlapped????//?overlapped?buffer
7?);


【參數(shù)】
1、hFile
??? 文件句柄(必須具有GENERIC_READ訪問(wèn)權(quán)限)。
??? 在Windows NT/2000/XP平臺(tái)上:對(duì)于異步讀操作,hFile可以是由CreateFile函數(shù)以FILE_FLAG_OVERLAPPED方式打開的任何句柄,或者一個(gè)由socket或accept函數(shù)返回的socket句柄。
??? 在Windows 95/98/Me平臺(tái)上:對(duì)于郵槽、命名管道和磁盤文件不能使用異步讀操作。?

2、lpBuffer
??? 用來(lái)接收從文件中讀出的數(shù)據(jù)的緩沖區(qū)指針。

3、nNumberOfBytesToRead
  ?指明要讀的字節(jié)總數(shù)。

4、lpNumberOfBytesRead
??? 一個(gè)變量指針,用來(lái)存儲(chǔ)實(shí)際傳輸?shù)淖止?jié)總數(shù)。ReadFile在做所有事情(包括錯(cuò)誤檢查)之前,先將這個(gè)值賦為0。當(dāng)ReadFile從一個(gè)命名管道上返回TRUE時(shí)這個(gè)參數(shù)為0,說(shuō)明消息管道另一端調(diào)用WriteFile時(shí)設(shè)置的nNumberOfBytesToWrite 參數(shù)為0。
??? 在Windows NT/2000/XP平臺(tái)上:如果lpOverlapped 為NULL,則lpNumberOfBytesRead不能為NULL。如果lpOverlapped 不是NULL,lpNumberOfBytesRead可以設(shè)為NULL。如果是一個(gè)overlapped形式的讀操作,我們可以動(dòng)用GetOverlappedResult函數(shù)來(lái)獲得傳輸?shù)膶?shí)際字節(jié)數(shù)。如果hFile關(guān)聯(lián)的是一個(gè)完成端口(I/O completion port),那么可以調(diào)用GetQueuedCompletionStatus函數(shù)來(lái)獲得傳輸?shù)膶?shí)際字節(jié)數(shù)。
??? 如果完成端口(I/O completion port)被占用,而你用的是一個(gè)用于釋放內(nèi)存的回調(diào)例程,對(duì)于lpOverlapped參數(shù)指向的OVERLAPPED結(jié)構(gòu)體來(lái)說(shuō),為這個(gè)參數(shù)指定NULL可以避免重新分配內(nèi)存時(shí)發(fā)生內(nèi)存泄漏。內(nèi)存泄漏會(huì)導(dǎo)致返回這個(gè)參數(shù)值時(shí)是一個(gè)非法值。
??? Windows 95/98/Me平臺(tái)上:這個(gè)參數(shù)不允許為NULL。

5、lpOverlapped
??? 一個(gè)指向OVERLAPPED結(jié)構(gòu)體的指針。如果hFile是以FILE_FLAG_OVERLAPPED方式獲得的句柄,這個(gè)結(jié)構(gòu)是必須的,不能為NULL。(否則函數(shù)會(huì)在錯(cuò)誤的時(shí)刻報(bào)告讀操作已經(jīng)完成了)。這時(shí),讀操作在由OVERLAPPED中Offset成員指定的偏移地址開始讀,并且在實(shí)際完成讀操作之前就返回了。在這種情況下,ReadFile返回FALSE,GerLastError報(bào)告從錯(cuò)誤類型是ERROR_IO_PENDING。這允許調(diào)用進(jìn)程繼續(xù)其他工作直到讀操作完成。OVERLAPPED結(jié)構(gòu)中的事件將會(huì)在讀操作完成時(shí)被使能。
??? 如果hFile不是以FILE_FLAG_OVERLAPPED方式獲得的句柄,并且lpOverlapped為NULL,讀操作就從當(dāng)前文件的開始位置讀起,直到讀操作完成ReadFile函數(shù)才能返回。
??? 在Windows NT/2000/XP平臺(tái)上:如果hFile不是以FILE_FLAG_OVERLAPPED方式獲得的句柄,并且lpOverlapped不為NULL,則讀操作在由OVERLAPPED中Offset成員指定的偏移地址開始讀,直到讀操作完成ReadFile函數(shù)才能返回。
??? 在Windows 95/98/Me平臺(tái)上:對(duì)于文件、磁盤、管道和郵槽的操作,這個(gè)參數(shù)必須為NULL。一個(gè)不為空的OVERLAPPED結(jié)構(gòu)體指針將導(dǎo)致調(diào)用失敗。Windows 95/98/Me平臺(tái)只支持串行口和并行口的overlapped 讀寫。

【返回值】
??? 有如下任一種情況發(fā)生都會(huì)導(dǎo)致函數(shù)返回:(1)在管道另一端的寫操作完成后(2)請(qǐng)求的字節(jié)數(shù)傳輸完畢(3)發(fā)生錯(cuò)誤。
??? 如果函數(shù)正確,返回非零。
??? 如果返回值是非零,但接收的字節(jié)數(shù)是0,那么可能是文件指針在讀操作期間超出了文件的end位置。然而,如果文件以FILE_FLAG_OVERLAPPED方式打開,lpOverlapped 參數(shù)不為NULL,文件指針在讀操作期間超出了文件的end位置,那么返回值肯定是FALSE,GetLastError返回的錯(cuò)誤是ERROR_HANDLE_EOF。

【備注】
??? 如果文件的一部分被另一個(gè)進(jìn)程鎖定,而當(dāng)前進(jìn)程試圖重復(fù)鎖定,那將會(huì)失敗。
??? 一個(gè)應(yīng)用程序在讀以FILE_FLAG_NO_BUFFERING方式打開的文件時(shí)要符合一定的條件。
(1)文件讀的開始地址必須是扇區(qū)大小的整數(shù)倍。GetDiskFreeSpace函數(shù)可以取得扇區(qū)的大小。
(2)請(qǐng)求讀的字節(jié)數(shù)也必須是扇區(qū)大小的整數(shù)倍。
(3)用于讀寫操作的Buffer地址必須按照扇區(qū)大小進(jìn)行邊界對(duì)齊??梢酝ㄟ^(guò)用VirtualAlloc 函數(shù)申請(qǐng)內(nèi)存來(lái)做到。
??? 在讀操作期間試圖訪問(wèn)相應(yīng)的輸入緩沖區(qū),會(huì)導(dǎo)致讀入到緩沖區(qū)的數(shù)據(jù)損壞。讀操作完成之前,應(yīng)用程序不能對(duì)這段輸入緩沖區(qū)做任何操作(包括讀、寫、重新分配內(nèi)存,釋放內(nèi)存等)。
??? ReadFile可以通過(guò)指向控制臺(tái)輸入對(duì)象的句柄將控制臺(tái)的輸入字符讀出來(lái)。控制臺(tái)的模式?jīng)Q定了ReadFile的具體行為。
??? 如果一個(gè)命名管道正在以消息模式被讀取,并且下一條消息比nNumberOfBytesToRead參數(shù)指定的長(zhǎng)度還大,那么ReadFile將返回FALSE并且GetLastError返回錯(cuò)誤為ERROR_MORE_DATA。剩下沒讀完的消息可能會(huì)被隨后的ReadFile或PeckNamedPipe函數(shù)讀出。
??? 讀取一個(gè)通信設(shè)備時(shí),ReadFile的行為被當(dāng)前的通信延時(shí)所支配,延時(shí)屬性的設(shè)置和取得使用SetCommTimeouts和GetCommTimeouts函數(shù)。如果你設(shè)置延時(shí)屬性失敗,就會(huì)得到不可預(yù)知的結(jié)果。
??? 如果ReadFile試圖讀取一個(gè)buffer太小的郵槽,將會(huì)返回FALSE并且GetLastError返回錯(cuò)誤為ERROR_INSUFFICIENT_BUFFER 。
??? 如果一個(gè)匿名的寫管道句柄已經(jīng)關(guān)閉,而ReadFile試圖用響應(yīng)的匿名權(quán)限讀這個(gè)管道句柄,將返回FALSE并且
GetLastError返回錯(cuò)誤為ERROR_BROKEN_PIPE。
??? 每當(dāng)有太多的異步I/O請(qǐng)求得不到響應(yīng),ReadFile就會(huì)失敗,并返回ERROR_INVALID_USER_BUFFER或ERROR_NOT_ENOUGH_MEMORY的錯(cuò)誤。
??? 在同步和異步兩種情況下,ReadFile中檢測(cè)EOF(文件結(jié)尾邊界)的代碼是不同的。當(dāng)一個(gè)同步讀操作到達(dá)文件結(jié)尾時(shí),ReadFile返回TRUE,并設(shè)置*lpNumberOfBytesRead 為0 。異步讀操作會(huì)在開始調(diào)用的讀操作中或者隨后的其他異步操作中突然遇到文件結(jié)尾。(1)如果EOF在ReadFile期間被檢測(cè)到,將會(huì)返回FALSE,且 GetLastError返回錯(cuò)誤描述 ERROR_HANDLE_EOF。(2)如果EOF在隨后的其他異步操作中被檢測(cè)到,則類似GetOverlappedResult 等試圖獲取操作結(jié)果的函數(shù)返回FALSE,且 GetLastError返回錯(cuò)誤描述ERROR_HANDLE_EOF。
??? 為了取消未響應(yīng)的異步I/O操作,用CancelIo函數(shù)。這個(gè)函數(shù)只能取消由調(diào)用進(jìn)程對(duì)特定句柄進(jìn)行的操作。被取消的I/O操作將被描述為ERROR_OPERATION_ABORTED。
??? 如果你正試圖從并不存在的軟驅(qū)中讀數(shù)據(jù),系統(tǒng)會(huì)彈出消息框提示你重新操作。為了阻止系統(tǒng)的消息框,調(diào)用函數(shù)SetErrorMode,參數(shù)設(shè)置為SEM_NOOPENFILEERRORBOX。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉