問題タブ [dllmain]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - dllmain() / DLL_PROCESS_ATTACH で許可されている com オブジェクトのインスタンス化?
DLLMAIN()
/に DLL をロードDLL_PROCESS_ATTACH
すると、問題が発生する場合があります。しかし、COM Objects
eq CoInitialize() / CoCreateInstance() を使用してインスタンス化できますか?
編集: 質問: COM インスタンスを作成すると、この状況で DLL をロードするような同様のエラーが発生する可能性がありますか? DLL をロードして COM インスタンスを作成することは、ある意味では似ているように思えます。
c++ - DLL Main を回避するには?
人々はそれを無視しましたが、私は以前にこれを尋ねました。繰り返しになりますが、これは長いトピックだったので、これを短くするように努めます。
自分が所有していないプログラムに DLL をインジェクトする場合、DLL Main の使用を避けるにはどうすればよいでしょうか? 多くの人は、たとえば DLL メインでスレッドを使用している場合、(ほとんどの場合) プログラムが停止するだけであることを知っているかもしれません。
注入された DLL から実際に実行されているスレッドを DLL Main に配置せずに実行する最良の方法を本当に知りたいです...方法がわからないので、これは不可能に思えます。
プログラムがフォルダー内にロードする必要があるコンパイル済みの.dllを配置できることは知っていますが、DirectXなどの実際のDLLではなく、必要なDLLをロードしますが、現在これを行っており、プログラムを介して制御することを意味しますDirectX ハック。誰かがすでに別のプログラムに注入したもの (MySQL デバッグ ログによる)。とにかくインジェクターでこれを行うことができることは知っていますが、それは難しいでしょう.
今すぐ殺すことができるので、誰か方法を知っていますか?
編集: このスレッドが重複しているため、DLL を挿入するために既に使用していません。
ただし、挿入された DLL で DllMain を使用すると、多すぎるポイントに到達したため、システムが停止します。
システムの停止を防ぎ、DLLMain の外部でスレッドを作成する方法が必要です。たとえば、挿入した DLL で DLLMain を使用せずに DLL のスレッドを開始する方法が必要です。
c++ - ダイナミック リンク ライブラリのベスト プラクティス - デッドロックを回避するには?
バックグラウンド
Dynamic-Link Library Best Practicesを読み、 DllMainでできることとできないことを理解しました。
ここで、多くのプロジェクトを含む Visual Studio 2013 ソリューションがあるとします。各プロジェクトは、異なるバイナリ/lib ファイルを生成します。
すべてのプロジェクトで使用される lib ファイルを生成するユーティリティ プロジェクトがあるとします。
ここで、このユーティリティ プロジェクトは、たとえば、上記のリンクに基づくLoadLibrary 関数を呼び出すいくつかの汎用関数を定義する場合があります。 DllMain 内から次のタスクを実行しない
質問
関数のスコープ内で呼び出されているため、特定の API を使用できないことを「知っている」汎用関数を実装するにはどうすればよい
DllMain
ですか?Windowsローダーロックにアクセスして、特定の呼び出しを無効にしたり、ロックされている場合は関数のアルゴリズムを変更したりすることはできますか?
例
プロジェクトユーティリティ
プロジェクトA
プロジェクトB
関数の呼び出しGetUserName()
は ではまったく問題ありませんがProject B
、 では禁止されています。Project A
そのような場合を回避するように、mu ソリューションをスマートにしたいと考えています。
理論的アプローチ
if( IsLoaderLocked() )
もちろん、これは実際のコードではありません。「危険な」API を呼び出す前に評価したい条件の例です。
c++ - C++ DllMain API 呼び出し
これはおそらく明らかなことですが、私にはあまり意味がありません。C++ を使用してゲーム プロセスに挿入される dll を作成しようとしています。「危険」なので、このメソッドから CreateThread のようなものを呼び出すべきではないことを読みました。このような別の方法を使用しても、まだ危険ですか? (擬似):
これが安全でない場合、これをどのように正確に行う必要がありますか?
c++ - DLLMain からマネージ コードを呼び出す
アンマネージ dll (c++ および WinAPI を使用) を作成していますが、いくつかの C# メソッドを使用したいので、C++/CLI を使用してラッパーを作成しました。
しかし、問題は次のとおりです。管理されていない dll が「注入」され (LoadLibrary)、Wrapper 関数を呼び出す方法がわからないまま、ここで立ち往生しています。
アンマネージ コード:
ラッパー (C++/CLI):
ここで何が起こっているのかわかりません。.NET 環境がロードされていませんか? Wrapper DLL がロードされていませんか? (モジュールをループしましたが、ラッパーはありませんでした)。
CLR を手動で初期化する必要がありますか?
ローダーロックについて読みましたが、ここでの問題かどうかはわかりません。
c++ - DllMain の DLL_PROCESS_DETACH の C++ コードが実行されていない
私はC++ で書かれた aclient
と aを持っています。server
はclient
にdll
あり、server
は にあり.exe
ます。最初に を起動し、次にを explorer.exe にserver
挿入します。を起動してメッセージを送信すると、正常に動作し、通信しています。dll
client
client
DLL_PROCESS_ATTACH
client
server
しかし、explorer.exe を再起動してdll
がアンロードさDLL_PROCESS_DETACH
れると、 を呼び出す必要があるため、 を起動してからclient
にメッセージを送信すると、それも機能するはずですが、機能しません。私は Windows 10 マシンと VS2015 で作業しています。server
DLL_PROCESS_DETACH
これが私のコードです
サーバ
c++ - Visual Studioの有無にかかわらずdllファイルを呼び出す
ここに私のコードがあります -
問題は、Visual Studio がインストールされている場合、この関数は正常に動作し、e:\temp\ フォルダーに DllMain.txt を作成できますが、Visual Studio がインストールされていない場合、関数呼び出しに問題があります。Explorer はこの関数を呼び出すことができません。詳細については、私が試していることの編集セクションに記載されています。
次の設定でdllファイルを作成しています。このリンクを確認してください
メールクライアント用のWindowsの「送信」プロトコルを実装しています。そのため、dll をビルドする必要があり、アプリケーションを Windows で電子メール クライアントとして登録する必要があります。したがって、ユーザーが Outlook や Thunderbird などの既定の電子メール クライアント用に私のアプリを選択した場合、いくつかのタスクを実行するために dll が必要でした。
例 - ファイルを選択 -> (右クリック) 送信先 -> メール受信者。
ここで、エクスプローラーは dll ファイルを呼び出します。Visual Studio がインストールされていれば完璧に動作します。Visual studio がインストールされていない PC で試してみたところ、エラー メッセージが表示され、その後、Visual studio をインストールしてから試してみたところ、希望どおりの結果が得られました。
ユーザーに MSVC ランタイムのインストールを強制したくありません。Thunderbird (Mozilla 製品) について知っていれば、Thunderbird は MSVC ランタイムなしでこのことを実行できるためです。