-1

このエラーは、2 つのことをしようとしているときに表示されます。

これを試みている間(コードブロック1):

_class = new Proc(Process.GetProcessesByName("procname")[0]);

次に、クラス Proc で起こっていることは

public Proc(Process _SelectedProcess)
{
    Process = _SelectedProcess;
}
public Process Process
{
    get
    {
        return SelectedProcess;
    }
    set
    {
        SelectedProcess = value;
        if (SelectedProcess != null)
        {
            Process.EnterDebugMode();
            _Reader = new Win32_Memory(value.Handle, value.MainModule.BaseAddress.ToInt32(), value.Id);
         }
    }
}

これは私が例外を取得する方法の一部です。私が見る限り、明らかな理由もなく例外なく通過することがあります。

注:Windows 7では決して通過しません。私はWindows 10を使用していますが、機能が機能することがあります

しかし、それが成功した場合、次に Process クラスの外部で OpenProcess() を使用する必要があるときに、ほとんどの場合例外が発生します。その後、再度実行しようとすると、コード ブロック 1 の実行に失敗します。

これ(コードブロック2)でも同じアクセス拒否エラーが発生し、時にはそうではありません...

if (_Reader.ReadInt(_addr) == 1) _Reader.Write(_addr, 0);
public bool Write(int address, long value)
{
    hProc = OpenProcess(ProcessAccessFlags.VMWrite, false, ID);
    byte[] val = BitConverter.GetBytes(value);
    bool worked = WriteProcessMemory(hProc, new IntPtr(address), val, (uint)val.LongLength, 0);
    CloseHandle(hProc);
    return worked;
}

アクセスフラグ:

[Flags]
public enum ProcessAccessFlags : uint
{
    All = 0x001F0FFF,
    Terminate = 0x00000001,
    CreateThread = 0x00000002,
    VMOperation = 0x00000008,
    VMRead = 0x00000010,
    VMWrite = 0x00000020,
    DupHandle = 0x00000040,
    SetInformation = 0x00000200,
    QueryInformation = 0x00000400,
    Synchronize = 0x00100000
}

インポート:

[DllImport("kernel32.dll")]
private static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, int unused);

また、このコードのすべてがエラーなしで実行され、このアプリケーションを再度開かない限り、または対象のアプリケーションを再起動しない限り機能する場合があることにも注意してください。

私がいくつかのことについて明確でない場合は、これについて私を助けてください-これは私の最初の質問であり、これまでに質問する必要はありませんでした...だから、必要なことは後で説明します

4

1 に答える 1