Дескрипторы HINTERNET
В этом разделе содержатся сведения о дескрипторах, используемых функциями WinINet, и иерархии, в которой они работают.
Сведения о дескрипторах HINTERNET
Дескрипторы, созданные и используемые функциями WinINet, имеют тип HINTERNET. Функции WinINet возвращают дескрипторы HINTERNET , которые не являются взаимозаменяемыми с другими типами дескрипторов. Поэтому их нельзя использовать с такими функциями, как ReadFile или CloseHandle. Аналогичным образом другие типы дескрипторов нельзя использовать с функциями WinINet. Например, дескриптор, возвращенный CreateFile, не может быть передан в InternetReadFile.
Функция InternetCloseHandle закрывает дескрипторы типа HINTERNET. Обратите внимание, что значения дескрипторов быстро перезапускаются; Таким образом, если дескриптор закрывается и новый дескриптор создается немедленно, есть вероятность того, что новый дескриптор имеет то же значение, что и только что закрытый дескриптор.
Дескрипторная иерархия
Дескрипторы HINTERNET поддерживаются в древовидной иерархии. Дескриптор, возвращаемый функцией InternetOpen , является корневым узлом. Дескриптора, возвращаемые функцией InternetConnect , занимают следующий уровень. Дескрипторы, возвращаемые функциями FtpOpenFile, FtpFindFirstFile и HttpOpenRequest , являются конечными узлами.
Windows XP и Windows Server 2003 R2 и более ранние версии: Дескрипторы, возвращаемые , GopherOpenFile и GopherFindFirstFile , также являются конечными узлами.
На следующей схеме показана иерархия дескрипторов HINTERNET . Каждое поле на схеме представляет функцию, возвращающую дескриптор HINTERNET .
На верхнем уровне находится функция InternetOpen , которая создает корневой дескриптор. Следующий уровень содержит функции InternetOpenUrl и InternetConnect . Функции, использующие дескриптор, возвращаемый InternetConnect , составляют последний уровень.
На следующей схеме показаны функции, зависящие от дескриптора, созданного InternetOpenUrl. Затеняемые поля представляют функции, возвращающие дескрипторы HINTERNET , а обычные — функции, использующие дескриптор HINTERNET , созданный связанной функцией.
Функции InternetQueryDataAvailable, InternetReadFile и InternetSetFilePointer используют дескриптор HINTERNET , созданный InternetOpenUrl.
Иерархия FTP
На следующей схеме показаны функции FTP, зависящие от дескриптора сеанса FTP, возвращаемого InternetConnect. Затеняемые поля представляют функции, возвращающие дескрипторы HINTERNET , а обычные — функции, использующие дескриптор HINTERNET , созданный функцией, от которой они зависят.
Функции FtpCreateDirectory, FtpDeleteFile, FtpGetCurrentDirectory, FtpGetFile, FtpPutFile, FtpRemoveDirectory, FtpRenameFile и FtpSetCurrentDirectory используют дескриптор HINTERNET , созданный InternetConnect.
На следующей схеме показаны две функции FTP, возвращающие дескрипторы, и зависимые от них функции. Затеняемые поля представляют функции, возвращающие дескрипторы HINTERNET , а обычные — функции, использующие дескриптор HINTERNET , созданный функцией, от которой они зависят.
Функция InternetFindNextFile зависит от дескриптора, созданного с помощью FtpFindFirstFile, в то время как InternetReadFile и InternetWriteFile используют дескриптор , созданный ftpOpenFile.
Иерархия HTTP
На следующей схеме показаны связи функций, используемых для протокола HTTP. Затеняемые поля представляют функции, возвращающие дескрипторы HINTERNET , а обычные — функции, использующие дескриптор HINTERNET , созданный функцией, от которой они зависят.
Функции HttpAddRequestHeaders, HttpQueryInfo, HttpSendRequest, HttpSendRequestEx и InternetErrorDlg зависят от дескриптора, созданного HttpOpenRequest.
На следующей схеме показаны функции, использующие дескриптор HINTERNET , созданный HttpOpenRequest после его отправки HttpSendRequest. Затеняемые поля представляют функции, возвращающие дескрипторы HINTERNET , а обычные — функции, использующие дескриптор HINTERNET , созданный функцией, от которой они зависят.
После того как HttpSendRequest использовал дескриптор, возвращенный HttpOpenRequest, его могут использовать InternetQueryDataAvailable, InternetReadFile и InternetSetFilePointer.
После того как HttpSendRequestEx использовал дескриптор, возвращенный HttpOpenRequest, этот дескриптор может использоваться httpEndRequest, InternetReadFileEx и InternetWriteFile. После вызова HttpEndRequest дескриптор может использоваться InternetReadFile, InternetSetFilePointer и InternetQueryDataAvailable.
Примечание
WinINet не поддерживает реализации сервера. Кроме того, его не следует использовать из службы. Для серверных реализаций или служб используйте службы Microsoft Windows HTTP (WinHTTP).