SetDllDirectoryA 関数 (winbase.h)

アプリケーションの DLL の検索に使用する検索パスにディレクトリを追加します。

構文

BOOL SetDllDirectoryA(
  [in, optional] LPCSTR lpPathName
);

パラメーター

[in, optional] lpPathName

検索パスに追加するディレクトリ。 このパラメーターが空の文字列 ("") の場合、呼び出しによって、既定の DLL 検索順序から現在のディレクトリが削除されます。 このパラメーターが NULL の場合、関数は既定の検索順序を復元します。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

SetDllDirectory 関数は、LoadLibrary 関数と LoadLibraryEx 関数に対する後続のすべての呼び出し影響します。 また、指定したディレクトリが検索パスにある間に、安全な DLL 検索モードも効果的に無効になります。

注意

パッケージ化または保護されたプロセスを実行 していない Win32 プロセスの場合、この関数を呼び出すと、関数を呼び出したプロセスから開始された子プロセスの DLL 検索順序にも影響します。

SetDllDirectory を呼び出した後、標準の DLL 検索パスは次のようになります。

  1. アプリケーションの読み込み元のディレクトリ。
  2. lpPathName パラメーターで指定されたディレクトリ。
  3. システム ディレクトリです。 GetSystemDirectory 関数を使用して、このディレクトリのパスを取得します。 このディレクトリの名前は System32 です。
  4. 16 ビット システム ディレクトリ。 このディレクトリのパスを取得する関数はありませんが、検索されます。 このディレクトリの名前は System です。
  5. Windows ディレクトリ。 GetWindowsDirectory 関数を使用して、このディレクトリのパスを取得します。
  6. PATH 環境変数に一覧表示されているディレクトリ。
SetDllDirectory 関数が呼び出されるたびに、前の SetDllDirectory 呼び出しで指定されたディレクトリが置き換えられます。 複数のディレクトリを指定するには、 AddDllDirectory 関数を使用し、 LOAD_LIBRARY_SEARCH_USER_DIRSで LoadLibraryEx を呼び出します。

LoadLibrary と LoadLibraryEx で使用される標準の検索パスに戻すには、NULL を指定して SetDllDirectory を呼び出します。 これにより、 SafeDllSearchMode レジストリ値に基づいて安全な DLL 検索モードも復元されます。

この関数を使用するアプリケーションをコンパイルするには、_WIN32_WINNTを 0x0502 以降として定義します。 詳細については、「 Windows ヘッダーの使用」を参照してください。

注意

winbase.h ヘッダーは、SetDllDirectory をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista、WINDOWS XP と SP1 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

AddDllDirectory

ダイナミック リンク ライブラリの検索順序

GetDllDirectory

GetSystemDirectory

GetWindowsDirectory

LoadLibrary

LoadLibraryEx