プロセスの特権をプログラムで調整して、後で子プロセスを作成した場合に、そのプロセスのメモリへの書き込みアクセスを常に (絶対に) 持つようにすることはできますか?
2 つの異なるプロセスによってロードされる dll を作成しました。コードのある時点で、プロセスを作成します。どのプロセスが自分の dll をロードするかに応じて、子プロセスのメモリを持っているPAGE_EXECUTE_WRITECOPY
か0
、子プロセスのメモリにアクセスすることがわかりました。私の推測では、どちらのプロセスでも別のことをしていないため、ロード プロセスがこの動作につながる制限を課したに違いありません。でプロセスのセキュリティ情報を調べましたProcess Explorer
が、両者の間に違いは見当たりませんでした。このhToken
値は、API を呼び出す呼び出し元によって提供されます。こいつが原因か。そうであるかどうかを確認するためにどのようにテストできますか?
CreateProcessAsUserW(hToken, exe, cmd_line, NULL, NULL,
false,
CREATE_SUSPENDED | CREATE_UNICODE_ENVIRONMENT | DETACHED_PROCESS | EXTENDED_STARTUPINFO_PRESENT | CREATE_BREAKAWAY_FROM_JOB,
NULL, NULL,
&si, &pi);
MEMORY_BASIC_INFORMATION buffer;
// 'address' is some valid address
SIZE_T num = VirtualQueryEx(pi.hProcess_handle, address,&buffer,sizeof(MEMORY_BASIC_INFORMATION));
if(num > 0)
{
DWORD access = buffer.AllocationProtect; // 0x0 or 0x80 depending on which process loads dll
DWORD state = buffer.State;
DWORD type = buffer.Type;
}