Поделиться через


Функция SHGetInstanceExplorer (shlobj_core.h)

Извлекает интерфейс, позволяющий размещенным расширениям оболочки и другим компонентам предотвратить преждевременное закрытие хост-процесса. Процессом узла обычно является Windows Обозреватель или Windows Internet Обозреватель, но эта функция также может использоваться другими приложениями.

Синтаксис

SHSTDAPI SHGetInstanceExplorer(
  [out] IUnknown **ppunk
);

Параметры

[out] ppunk

Тип: IUnknown**

При успешном возвращении этой функции содержит адрес указателя интерфейса IUnknown хост-процесса. Это свободный интерфейс, используемый для предотвращения завершения хост-процесса. Если вызов функции завершается сбоем, это значение имеет значение NULL.

Возвращаемое значение

Тип: HRESULT

Если эта функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

Существует ряд компонентов, таких как обработчики расширений оболочки, которые реализуются как библиотеки DLL и выполняются в хост-процессе, например Windows Обозреватель (Explorer.exe) или Интернет-Обозреватель (Iexplore.exe). Как правило, когда пользователь закрывает хост-процесс, компонент также немедленно завершает работу. Такое внезапное завершение может создать проблемы для некоторых компонентов. Например, если компонент использует фоновый поток для скачивания данных или выполнения функций пользовательского интерфейса, ему может потребоваться дополнительное время для безопасного завершения работы.

SHGetInstanceExplorer позволяет компонентам, выполняемым в хост-процессе, хранить ссылку на хост-процесс. SHGetInstanceExplorer увеличивает количество ссылок узла и возвращает указатель на интерфейс IUnknown узла. Удерживая ссылку, компонент может предотвратить преждевременное закрытие ведущего процесса. После завершения необходимой обработки компонент должен вызвать (*ppunk)->Release , чтобы освободить ссылку на узел и разрешить завершение процесса.

Примечание Если shGetInstanceExplorer успешно работает, компонент должен освободить ссылку узла, когда она больше не нужна. В противном случае все ресурсы, связанные с процессом, останутся в памяти. Интерфейс IUnknown , на который указывает *ppunk , можно использовать только для выпуска этой ссылки. Компоненты не могут использовать (*ppunk)->QueryInterface для запроса других указателей интерфейса.
 
SHGetInstanceExplorer выполняется успешно, только если он вызывается из приложения, которое ранее вызывало SHSetInstanceExplorer , чтобы задать ссылку на процесс.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header shlobj_core.h (включая Shlobj.h)
Библиотека Shell32.lib
DLL Shell32.dll (версия 4.0 или более поздняя)