3

Hello I am writing a minifilter driver for intercepting all the irp packets from a certain process say a.exe .

So , in the driver code it can be done by applying a check on the command line arguments that started the process.

Does anyone know how can i retrieve the command line argument ??

Thanks in advance .

4

2 に答える 2

4

カーネルモード内からこれを行うためのサポートされている方法はありません。実際、カーネルからユーザーモードのプロセス情報にアクセスしようとすると、一般的に苦痛になります。ユーザーモードサービスへのリクエストを起動することをお勧めします。ユーザーモードサービスはその情報を見つけて、カーネルコンポーネントに戻すことができます。

ただし、それを行うための文書化されていない方法があります。EPROCESSターゲットプロセスの構造体へのハンドルを取得できる場合は、その中のPEB(プロセス環境ブロック)構造体へのポインターを取得できます。RTL_USER_PROCESS_PARAMETERSこの構造体には、というメンバーを持つ構造体へのポインターがありますCommandLine

例:

UNICODE_STRING* commandLine = epProcess->Peb->ProcessParameters->CommandLine;

これの欠点は、EPROCESSほぼ完全に不透明であり、PEB半不透明でもあることです。つまり、Windowsの将来のバージョンで変更される可能性があります。私は確かに、これを本番コードで試すことを推奨しません。

于 2012-06-06T14:17:23.360 に答える
3

NtQueryInformationProcess関数またはZwQueryInformationProcess関数を、PROCESSINFOCLASSパラメーターをProcessBasicInformationとして使用してみてください。出力パラメーターProcessInformationは、タイプPROCESS_BASIC_INFORMATIONの構造体になります。多項式で述べたように、この構造体には、プロセスのPEB構造体へのポインタがあります。この構造体には、ProcessParametersフィールドで探している情報が含まれています。

于 2012-06-06T14:26:10.383 に答える