DllMainの役割のDllMainの役割

DllMainの役割

DllMain関数は、デフォルトのエントリポイントDLLモジュールです。WindowsがDLLモジュールをロードする際にこの関数が呼び出されます。システムは、最初のグローバルオブジェクトのコンストラクタを呼び出して、グローバル関数のDLLMain呼び出しますDLLMain DLL鎖に機能しないだけであろう接続がプロセスにロードされたときにDLLモジュール及び分離プロセス場合、呼び出される(及び他の時間)も呼ばれています。

DLLエントリポイント関数:のDllMainは、注:場合は(との間の差である輸出唯一のリソースDLLが DllMainのことはできない機能)。

プロトタイプ:

 
BOOL APIENTRYのDllMain(HMODULE HMODULE、   
                       DWORD ul_reason_for_call、   
                       LPVOID lpReserved   
{   
    戻りTRUE。  
}  


意味パラメータ:

①hModuleパラメータ:DLLのインスタンスは、それ自体にポイントを扱います。

②ul_reason_for_callパラメータ:DLLが呼び出された理由を示して、あなたは以下の4つの値を持つことができます。


1. DLL_PROCESS_ATTACH:
DLLは>> <<呼ばれるDllMain関数で、その結果、プロセスを呼び出した最初のとき、

一方ul_reason_for_call値DLL_PROCESS_ATTACH、

同じプロセスが再び後でこのDLLを呼び出す場合は、オペレーティングシステムがのみ、DLLの使用頻度が増加します

DLL_PROCESS_ATTACH DllMain関数の呼び出しは、DLLを使用しません。


2.DLL_PROCESS_DETACH:
DLLがプロセスのアドレス空間からマップされていない場合は、システムが渡され、そのDllMainの、ul_reason_for_call値がDLL_PROCESS_DETACHで呼び出します。
★コールのTerminateProcessため、プロセスの終了した場合、システムは、DLLのDllMain DLL_PROCESS_DETACH関数を呼び出すために使用されることはありません。これは、DLLがプロセスの終了前に、クリーンアップ作業を実行する機会がないことを意味します。


3.DLL_THREAD_ATTACH:
プロセスがスレッドを作成するとき、すべてのDLLファイルイメージをプロセスのアドレス空間にマッピングされ、現在のシステムを表示し、

そして、値のDLL_THREAD_ATTACHと機能のDLLをDllMainの呼び出し。 

DLLのDllMain関数の実装に責任を新しく作成されたスレッド、

すべてのDLLは、通知の処理を終了したときにのみ、システムは唯一のスレッドがそのスレッド関数の実行を開始できます。


4.DLL_THREAD_DETACH:
スレッドは、スレッドを終了するExitThreadを呼び出す場合、(スレッド関数が戻ると、システムが自動的にExitThreadを呼び出します)

現在のすべてのシステムDLLファイルイメージがプロセス空間にマッピングされたビュー、

そしてDllMain関数を呼び出すDLL_THREAD_DETACHと、

スレッドレベルのクリーンアップを実行するために、すべてのDLLを通知します。
★注意:システムがのTerminateThreadを呼び出すためのスレッドの終了をスレッドがある場合は、

DLL_THREAD_DETACH値システムは、すべてのDLLのDllMain関数を呼び出すために使用されることはありません。

 

③lpReservedパラメータ:隠者ロードロードと表示、ユーザが定義したい場合、このパラメータの値は、ゼロ負荷時を示し、同じではないダイナミックリンクライブラリの形式で負荷がこのパラメータの値を決定することによって達成することができます。

 

暗黙の動的ライブラリのヘッダファイルlibにプログラムが実行されている場合、DLLファイルのDLLファイルをロードする必要性を示しているが、またコンテンツは、複数のプログラムにロードされただけのDLLのDLLのメモリを使用する
  だけでプログラムを実行するためのdllファイルを表示する必要がありますロードするために動的ライブラリをライブラリ関数のLoadLibrary使用している場合だけでなくだけでロードされたDLLのDLLをロード
  ロードと組み合わせて負荷に必要なヘッダはlibにdllファイルのdllファイルをファイルが、プログラムを使用して、プログラムが実行されているロードされません表示するには、DLLロード遅延で実際に暗黙の動的ライブラリをただ、DLL、今回原理と同じ負荷の表示の原理をロードします。コンパイラオプションは、リンクを設定するには>遅延ロードDLLファイルがロードされたDLLに記入する必要が
setdlldirctroryによって運営されている()は、動的ライブラリプログラムへのパスを指定することができますダイナミックライブラリのパスを知っておく必要があります

 

DllMain関数は、デフォルトのエントリポイントDLLモジュールです。WindowsがDLLモジュールをロードする際にこの関数が呼び出されます。システムは、最初のグローバルオブジェクトのコンストラクタを呼び出して、グローバル関数のDLLMain呼び出しますDLLMain DLL鎖に機能しないだけであろう接続がプロセスにロードされたときにDLLモジュール及び分離プロセス場合、呼び出される(及び他の時間)も呼ばれています。

DLLエントリポイント関数:のDllMainは、注:場合は(との間の差である輸出唯一のリソースDLLが DllMainのことはできない機能)。

プロトタイプ:

 
BOOL APIENTRYのDllMain(HMODULE HMODULE、   
                       DWORD ul_reason_for_call、   
                       LPVOID lpReserved   
{   
    戻りTRUE。  
}  


意味パラメータ:

①hModuleパラメータ:DLLのインスタンスは、それ自体にポイントを扱います。

②ul_reason_for_callパラメータ:DLLが呼び出された理由を示して、あなたは以下の4つの値を持つことができます。


1. DLL_PROCESS_ATTACH:
DLLは>> <<呼ばれるDllMain関数で、その結果、プロセスを呼び出した最初のとき、

一方ul_reason_for_call値DLL_PROCESS_ATTACH、

同じプロセスが再び後でこのDLLを呼び出す場合は、オペレーティングシステムがのみ、DLLの使用頻度が増加します

DLL_PROCESS_ATTACH DllMain関数の呼び出しは、DLLを使用しません。


2.DLL_PROCESS_DETACH:
DLLがプロセスのアドレス空間からマップされていない場合は、システムが渡され、そのDllMainの、ul_reason_for_call値がDLL_PROCESS_DETACHで呼び出します。
★コールのTerminateProcessため、プロセスの終了した場合、システムは、DLLのDllMain DLL_PROCESS_DETACH関数を呼び出すために使用されることはありません。これは、DLLがプロセスの終了前に、クリーンアップ作業を実行する機会がないことを意味します。


3.DLL_THREAD_ATTACH:
プロセスがスレッドを作成するとき、すべてのDLLファイルイメージをプロセスのアドレス空間にマッピングされ、現在のシステムを表示し、

そして、値のDLL_THREAD_ATTACHと機能のDLLをDllMainの呼び出し。 

DLLのDllMain関数の実装に責任を新しく作成されたスレッド、

すべてのDLLは、通知の処理を終了したときにのみ、システムは唯一のスレッドがそのスレッド関数の実行を開始できます。


4.DLL_THREAD_DETACH:
スレッドは、スレッドを終了するExitThreadを呼び出す場合、(スレッド関数が戻ると、システムが自動的にExitThreadを呼び出します)

現在のすべてのシステムDLLファイルイメージがプロセス空間にマッピングされたビュー、

そしてDllMain関数を呼び出すDLL_THREAD_DETACHと、

スレッドレベルのクリーンアップを実行するために、すべてのDLLを通知します。
★注意:システムがのTerminateThreadを呼び出すためのスレッドの終了をスレッドがある場合は、

DLL_THREAD_DETACH値システムは、すべてのDLLのDllMain関数を呼び出すために使用されることはありません。

 

③lpReservedパラメータ:隠者ロードロードと表示、ユーザが定義したい場合、このパラメータの値は、ゼロ負荷時を示し、同じではないダイナミックリンクライブラリの形式で負荷がこのパラメータの値を決定することによって達成することができます。

 

暗黙の動的ライブラリのヘッダファイルlibにプログラムが実行されている場合、DLLファイルのDLLファイルをロードする必要性を示しているが、またコンテンツは、複数のプログラムにロードされただけのDLLのDLLのメモリを使用する
  だけでプログラムを実行するためのdllファイルを表示する必要がありますロードするために動的ライブラリをライブラリ関数のLoadLibrary使用している場合だけでなくだけでロードされたDLLのDLLをロード
  ロードと組み合わせて負荷に必要なヘッダはlibにdllファイルのdllファイルをファイルが、プログラムを使用して、プログラムが実行されているロードされません表示するには、DLLロード遅延で実際に暗黙の動的ライブラリをただ、DLL、今回原理と同じ負荷の表示の原理をロードします。コンパイラオプションは、リンクを設定するには>遅延ロードDLLファイルがロードされたDLLに記入する必要が
setdlldirctroryによって運営されている()は、動的ライブラリプログラムへのパスを指定することができますダイナミックライブラリのパスを知っておく必要があります

 

おすすめ

転載: www.cnblogs.com/xiangtingshen/p/11465002.html