HINTERNET 控制碼

本節包含 WinINet 函式所使用的控制碼及其運作階層的相關資訊。

關於 HINTERNET 控制碼

WinINet 函式所建立和使用控制碼的類型為 HINTERNET。 WinINet 函式會傳回無法與其他控制碼類型交換的 HINTERNET 控制碼。 因此,它們不能與 ReadFileCloseHandle等函式搭配使用。 同樣地,其他控制碼類型不能與 WinINet 函式搭配使用。 例如, CreateFile 傳回的控制碼無法傳遞至 InternetReadFile

InternetCloseHandle函式會關閉HINTERNET類型的控制碼。 請注意,控制碼值會快速回收;因此,如果控制碼已關閉,而且會立即產生新的控制碼,則新控制碼有與剛關閉之控制碼相同的值。

處理階層

HINTERNET控制碼會在樹狀結構階層中維護。 InternetOpen函式所傳回的控制碼是根節點。 InternetConnect函式所傳回的控制碼佔用下一個層級。 FtpOpenFileFtpFindFirstFileHttpOpenRequest函式所傳回的控制碼是分葉節點。

Windows XP 和 Windows Server 2003 R2 和更早版本:GopherOpenFileGopherFindFirstFile 所傳回的控制碼也是分葉節點。

下圖說明 HINTERNET 控制碼的階層。 圖表中的每個方塊都代表傳回 HINTERNET 控制碼的函式。

建立控制碼的函式

最上層是 InternetOpen 函式,它會建立根控制碼。 下一個層級包含 InternetOpenUrlInternetConnect 函式。 使用 InternetConnect 所傳回控制碼的函式會構成最後一個層級。

下圖顯示相依于 InternetOpenUrl所建立控制碼的函式。 陰影方塊代表傳回 HINTERNET 控制碼的函式,而純方塊則代表使用相關聯函式所建立 HINTERNET 控制碼的函式。

使用 internetopenurl 控制碼的函式

InternetQueryDataAvailableInternetReadFileInternetSetFilePointer函式會使用InternetOpenUrl所建立的HINTERNET控制碼。

FTP 階層

下圖顯示與 InternetConnect所傳回之 FTP 會話控制碼相依的 FTP 函式。 陰影方塊代表會傳回 HINTERNET 控制碼的函式,而純方塊則代表使用由函式所建立之 HINTERNET 控制碼所建立的函式。

使用 ftp 會話控制碼的函式

FtpCreateDirectoryFtpDeleteFileFtpGetCurrentDirectoryFtpGetFileFtpPutFileFtpRemoveDirectoryFtpRenameFileFtpSetCurrentDirectory函式全都使用InternetConnect所建立的HINTERNET控制碼。

下圖顯示兩個 FTP 函式,這些函式會傳回控制碼和相依的函式。 陰影方塊代表會傳回 HINTERNET 控制碼的函式,而純方塊則代表使用由函式所建立之 HINTERNET 控制碼所建立的函式。

使用 ftpopen 和 ftpfindfirstfile 控制碼的函式

InternetFindNextFile函式相依于FtpFindFirstFile所建立的控制碼,而InternetReadFileInternetWriteFile則使用FtpOpenFile所建立的控制碼。

HTTP 階層

下圖顯示用於 HTTP 通訊協定之函式的關聯性。 陰影方塊代表會傳回 HINTERNET 控制碼的函式,而純方塊則代表使用由函式所建立之 HINTERNET 控制碼所建立的函式。

使用 HTTPopenrequest 控制碼的函式

HttpAddRequestHeadersHttpQueryInfoHttpSendRequestHttpSendRequestExInternetErrorDlg函式相依于HttpOpenRequest所建立的控制碼。

下圖顯示由HttpSendRequest傳送之後,使用HttpOpenRequest所建立HINTERNET控制碼的函式。 陰影方塊代表會傳回 HINTERNET 控制碼的函式,而純方塊則代表使用由函式所建立之 HINTERNET 控制碼所建立的函式。

在 HTTPsendrequest 之後使用控制碼的函式

在 HttpSendRequest使用HttpOpenRequest傳回的控制碼之後,InternetQueryDataAvailableInternetReadFile 和 InternetSetFilePointer可以使用它。

在 HTTPsendrequestex 之後使用控制碼的函式

HttpSendRequestEx使用HttpOpenRequest傳回的控制碼之後,HttpEndRequestInternetReadFileExInternetWriteFile可以使用控制碼。 呼叫 HttpEndRequest 之後, InternetReadFileInternetSetFilePointerInternetQueryDataAvailable可以使用控制碼。

注意

WinINet 不支援伺服器實作。 此外,它不應該從服務使用。 對於伺服器實作或服務,請使用 Microsoft Windows HTTP 服務 (WinHTTP)