0

親が explorer.exe であるプロセスの現在のログオン セッションのハンドルを取得したいと考えています。

管理者またはサービスとしてプロセスを実行する場合、ログオン セッションはありません。ログオン セッションを取得したい理由は、ユーザーが (.exe を右クリック -> 管理者として実行) を介してプログラムを開こうとしたときに開くことを制限したいプログラム (.exe) があるためです。ユーザーが管理者経由で開くと、関連付けられたログオン セッションはありませんが、ユーザーがダブルクリックして開くと、関連付けられたログオン セッションがあります。

かなりの場所を検索しましたが、ログオン SID を取得するためのプロセスを取得するだけです。さらに詳しい情報が必要な場合は、http://technet.microsoft.com/en-us/sysinternals/bb896653をダウンロードし、エクスプローラーで --> 実行中のプログラムを右クリック --> セキュリティを確認してください。ここにログオン セッションがあります。

4

2 に答える 2

4

GetCurrentProcessを呼び出して現在のプロセスへのハンドルを取得し、それを使用してOpenProcessTokenを呼び出して、現在のプロセスのアクセス トークンを取得できます。それができたら、 GetTokenInformation を呼び出してTokenSessionIdリクエストできます。

編集:

他に試してみることができると思いました。セッション ID の代わりにTokenOwnerをリクエストできます。それを取得すると、セキュリティ記述子が得られます。その後、 LookupAccountSidを呼び出して、記述子に関連付けられたアカウント名を取得できます。次に、「管理者」などに対してそれを確認できます。

于 2012-10-04T00:22:19.490 に答える
2

OpenProcessTokenオプションを続けて使用するGetTokenInformationと、プロセスに関連付けられたログオン セッションを取得できTokenStatisticsます。ただし、これは、特定のログオン セッションが昇格されているかどうかを判断する簡単な方法がないため、「管理者として実行」を使用してプロセスが起動されたかどうかを確認する賢明な方法ではありません。「管理者として実行」で起動されたプロセスにログオン セッションがないというのは事実ではありません。

プロセスが「管理者として実行」されたかどうかを確認するには、TokenElevationTypeオプションを使用します。TokenElevationTypeFullこれは、「管理者として実行」が使用された場合にのみ返されます。

(1 つの注意点: 管理者以外のユーザーが「管理者として実行」を使用し、管理者のユーザー名とパスワードを入力した場合に何が返されるかはわかりません。このTokenElevationTypeシナリオをテストする必要があります。.TokenElevationTokenElevationType

プロセスに管理者権限があるかどうかを本当に知りたい場合は、CheckTokenMembership代わりに使用する必要があります。管理者グループを探します。MSDN ドキュメントには、まさにこれを行うサンプル コードがあります。

ここでの違いは、UAC が無効になっている (そしてユーザーが管理者である) 場合、またはユーザーがローカルの管理者である場合にどうしたいかです。このような場合、「管理者として実行」オプションはなく、すべてのプロセスが管理者権限で自動的に実行されます。これらのケースを検出する場合は、 を使用しますCheckTokenMembership。ユーザーが明示的に「管理者として実行」と言ったケースのみを検出したい場合は、 を使用しますTokenElevationType

于 2012-10-04T02:46:40.620 に答える