SetDefaultDllDirectories 関数 (libloaderapi.h)

呼び出し元プロセスが DLL を読み込むときに検索するディレクトリの既定のセットを指定します。 この検索パスは、 LoadLibraryExLOAD_LIBRARY_SEARCH フラグなしで呼び出されるときに使用されます。

構文

BOOL SetDefaultDllDirectories(
  [in] DWORD DirectoryFlags
);

パラメーター

[in] DirectoryFlags

検索するディレクトリ。 このパラメーターには、次の値の任意の組み合わせを指定できます。

説明
LOAD_LIBRARY_SEARCH_APPLICATION_DIR
0x00000200
この値を使用すると、アプリケーションのインストール ディレクトリが検索されます。
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
0x00001000
この値は、 LOAD_LIBRARY_SEARCH_APPLICATION_DIRLOAD_LIBRARY_SEARCH_SYSTEM32およびLOAD_LIBRARY_SEARCH_USER_DIRSの組み合わせです。

この値は、アプリケーションが DLL 検索パスに含めるディレクトリの推奨最大数を表します。

LOAD_LIBRARY_SEARCH_SYSTEM32
0x00000800
この値を使用すると、%windows%\system32 が検索されます。
LOAD_LIBRARY_SEARCH_USER_DIRS
0x00000400
この値を使用すると、AddDllDirectory または SetDllDirectory 関数を使用して明示的に追加されたパスが検索されます。 複数のディレクトリが追加されている場合、それらのディレクトリが検索される順序は指定されません。

戻り値

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

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

解説

DLL 検索パスは、LoadLibrary 関数または LoadLibraryEx 関数呼び出しで完全なパスが指定されていない場合、または DLL への完全パスが指定されているが、システムが依存 DLL を検索する必要がある場合に、DLL を検索するディレクトリのセットです。 標準 DLL 検索パスの詳細については、「 ダイナミック リンク ライブラリの検索順序」を参照してください。

標準の DLL 検索パスには、 DLL の事前読み込み攻撃に対して脆弱なディレクトリが含まれています。 アプリケーションは SetDefaultDllDirectories 関数を使用して、最も脆弱なディレクトリを排除し、検索される他のディレクトリを制限するプロセスの既定の DLL 検索パスを指定できます。 プロセス DLL 検索パスは、呼び出し元のプロセスにのみ適用され、プロセスの有効期間にわたって保持されます。

DirectoryFlags パラメーターで複数のフラグが指定されている場合、ディレクトリは次の順序で検索されます。

  • DLL (LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR) を含むディレクトリ。 このディレクトリは、読み込まれる DLL の依存関係のみを検索します。
  • アプリケーション ディレクトリ (LOAD_LIBRARY_SEARCH_APPLICATION_DIR)。
  • AddDllDirectory 関数 (LOAD_LIBRARY_SEARCH_USER_DIRS) または SetDllDirectory 関数を使用して、アプリケーション検索パスに明示的に追加されたパス。 複数のパスが追加されている場合、パスが検索される順序は指定されません。
  • システム ディレクトリ (LOAD_LIBRARY_SEARCH_SYSTEM32)。
SetDefaultDllDirectoriesLOAD_LIBRARY_SEARCH_USER_DIRSを指定しない場合、AddDllDirectory 関数で指定されたディレクトリは、LOAD_LIBRARY_SEARCH_USER_DIRSを指定する LoadLibraryEx 関数呼び出しにのみ使用されます。

標準 DLL 検索パスに戻したり、 SetDefaultDllDirectories で指定されたディレクトリを検索パスから削除したりすることはできません。 ただし、プロセス DLL 検索パスは、1 つ以上のLOAD_LIBRARY_SEARCH フラグを使用して LoadLibraryEx を呼び出すことでオーバーライドでき、AddDllDirectory で追加されたディレクトリは RemoveDllDirectory を呼び出すことで削除できます。

Windows 7、Windows Server 2008 R2、Windows Vista、Windows Server 2008: アプリケーションでこの関数を呼び出すには、 GetProcAddress 関数を使用して、Kernel32.dll からアドレスを取得します。 KB2533623 ターゲット プラットフォームにインストールする必要があります。

要件

   
サポートされている最小のクライアント Windows 8 [デスクトップ アプリのみ]、Windows 7、Windows Server 2008 R2、Windows Vista、Windows Server 2008 でKB2533623
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー libloaderapi.h (Windows.h を含む)
[DLL] Kernel32.dll

関連項目

AddDllDirectory

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

ダイナミック リンク ライブラリのセキュリティ

LoadLibrary

LoadLibraryEx

RemoveDllDirectory