###前提・実現したいこと
C# でHeapListを作成したい。
###発生している問題・エラーメッセジ
Heap32ListFirstが値を返さない
###該当のソースコード
public static Process GetProcessId(string processName){ //System.Diagnostics.Process[] ps =System.Diagnostics.Process.GetProcessesByName(processName); return ps[0]; } public struct HEAPLIST32 { public uint dwSize; public uint th32ProcessID; public uint th32HeapID; public uint dwFlags; } public const uint TH32CS_SNAPHEAPLIST = 0x00000001; public const uint TH32CS_SNAPMODULE = 0x00000008; [DllImport("kernel32.dll", SetLastError = true)] internal static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processid); [DllImport("kernel32.dll")] internal static extern bool Heap32ListFirst(IntPtr hSnapshot, ref HEAPLIST32 lphl); //Main void getHeapList(){ process = GetProcessId("XXXXX.XXX/*(任意のプロセス名)*/"); IntPtr hModule= CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE, (uint)process.Id); HEAPLIST32 heaplist = new HEAPLIST32(); heaplist.dwSize = (uint)Marshal.SizeOf(heaplist); bool r = Heap32ListFirst(hModule, ref heaplist); }
r == false Error...
ここでエラーが発生しています。
hModuleは値が戻ってきているので動いていると考えられる。(エラーの場合は-1が戻る)
}
###疑問
基本構造は、サンプルを利用したものですが、64bitで動作するのかの情報がほとんどなく、TH32CS_SNAPMODULE を追加してみましたが、同じくエラーが帰ってきます。
###補足情報(言語/FW/ツール等のバージョンなど)
Windows10
64bit
C#
64bit アプリとしてBuild
よろしくお願いします。
###追記
AnyCpuでBuildすると成功しました。
x64の場合 エラーコード24が出ているようです。
###追記
C++のサンプルではDwordのサイズが可変します。
C#の場合uintで宣言した場合、自動的にサイズが切り替わらないので、この部分を考える必要がありました
具体的には、構造体のほうを以下のようにすることで動くようになりました
public struct HEAPLIST32
{
public UInt64 dwSize;
public UInt32 th32ProcessID;
public UInt64 th32HeapID;
public UInt32 dwFlags;
}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/12 05:34
2016/09/12 22:13