-1

システム アカウントの資格情報で実行されている Windows サービスがあります。このサービスは、アクティブなコンソール セッション ID、つまりインタラクティブにログインしている Windows ユーザーのウィンドウを定期的にポーリングし、wtsapi32.dll 関数 WTSQueryUserToken(…) をピンボークして、アクティブなコンソール セッション ID に関連付けられたユーザー トークンを取得します。この実装は、現場で 99.9% の割合で完璧に機能します。しかし最近、この実装が定期的に (一貫してではなく) アクティブなコンソール セッション ID のユーザー トークンの取得に失敗する顧客を発見しました。

この投稿の下部にあるお客様の OS 情報を参照してください。

WTSQueryUserToken() が失敗すると、GetLastError() は Windows システム エラー コード 1723 を返します。

エラー コード 1723 の説明: 「RPC サーバーがビジー状態のため、この操作を完了できません」</p>

実装を示すコード スニペットの例を次に示します。

int ActiveSession = 0;
Win32Wrapper.GetActiveConsoleSessionId(ref ActiveSession);
IntPtr UserToken = IntPtr.Zero;

if(!Win32Wrapper.WTSQueryUserToken(ActiveSession, ref UserToken))
{
   int myErr = Convert.ToInt32(Win32Wrapper.GetLastError());
   log("Failed to retrieve UserToken." + myErr.ToString());
   return;
}
else
{
   log("Retrieved User Token");
}

誰が犯人であるかを知っていますか?

お客様の設定は次のとおりです。

  • 認証: アクティブ ディレクトリ
  • オペレーティング·システム:
  • Microsoft Windows NT 5.1.2600 サービス
  • パック 3 現在の UI カルチャ: en-US
  • 現在のカルチャ: en-US CLR
  • バージョン: 2.0.50727.3603
  • IE バージョン: 8.0.6001.18702
  • システムタイプ: 32 ビット無料
  • 物理メモリ: 合計 411MB
  • 物理メモリ: 893MB システム
  • メーカー: デル株式会社
  • モデル: Vostro 1000
  • プロセッサ 1: AMD Athlon(tm) 64 X2 デュアルコア プロセッサ TK-57

サービス:

名前: Alerter 開始モード: 無効 状態: 停止 名前: Application Layer Gateway Service 開始モード: 手動 状態: 実行中 名前: Apple Mobile Device 開始モード: 自動 状態: 実行中 名前: アプリケーション管理 開始モード: 手動 状態: 停止 名前: ASP. NET 状態サービス 開始モード: 手動 状態: 停止 名前: Ati HotKey Poller 開始モード: 自動 状態: 実行中 名前: Windows オーディオ 開始モード: 自動 状態: 実行中 名前: バックグラウンド インテリジェント転送サービス 開始モード: 自動 状態: 実行中 名前: Bonjour Service開始モード: 自動 状態: 実行中 名前: コンピュータ ブラウザ 開始モード: 自動 状態: 実行中 名前:インデックス サービス開始モード: 手動状態: 停止名前: クリップブック開始モード: 無効状態: 停止名前: .NET ランタイム最適化サービス v2.0.50727_X86 開始モード: 手動状態: 停止名前: COM+ システム アプリケーション開始モード: 手動状態: 停止名前: 暗号化サービス 開始モード: 自動 状態: 実行中 名前: DCOM サーバー プロセス ランチャー 開始モード: 自動 状態: 実行中 名前: DHCP クライアント 開始モード: 自動 状態: 実行中 名前: 論理ディスク マネージャー管理サービス 開始モード: 手動 状態: 停止 名前:論理ディスク マネージャー 開始モード: 自動 状態: 実行中 名前: DNS クライアント 開始モード: 自動 状態: 実行中 名前:有線自動構成 開始モード: 手動 状態: 停止 名前: Extensible Authentication Protocol Service 開始モード: 手動 状態: 停止 名前: エラー報告サービス 開始モード: 無効 状態: 停止 名前: イベント ログ 開始モード: 自動 状態: 実行中 名前: COM+ イベント システム開始モード: 手動 状態: 実行中 名前: ユーザーの簡易切り替え 互換性 開始モード: 手動 状態: 停止 名前: FlipShare Service 開始モード: 自動 状態: 実行中 名前: Windows Presentation Foundation Font Cache 3.0.0.0 開始モード: 手動 状態: 停止 名前:ヘルプとサポート 開始モード: 自動 状態: 実行中 名前: HID 入力サービス 開始モード: 自動 状態:実行中の名前: Health Key and Certificate Management Service 開始モード: 手動 状態: 停止 名前: HTTP SSL 開始モード: 手動 状態: 停止 名前: InstallDriver Table Manager 開始モード: 手動 状態: 停止 名前: Windows CardSpace 開始モード: 手動 状態: 停止名前: IMAPI CD-Burning COM Service 開始モード: 無効 状態: 停止 名前: iPod サービス開始モード: 手動 状態: 停止 名前: Java Quick Starter 開始モード: 無効 状態: 停止 名前: サーバー 開始モード: 自動 状態: 実行中 名前:ワークステーションの開始モード: 自動状態: 実行中の名前: TCP/IP NetBIOS ヘルパーの開始モード: 自動状態: 実行中の名前:McAfee Framework Service 開始モード: 自動 状態: 実行中 名前: McAfee McShield 開始モード: 自動 状態: 実行中 名前: McAfee タスク マネージャー開始モード: 自動 状態: 実行中 名前: Machine Debug Manager 開始モード: 自動 状態: 実行中 名前: Messenger 開始モード: 無効 状態: 停止 名前: Vision Control Manager 開始モード: 無効 状態: 停止 名前: NetMeeting リモート デスクトップ共有 開始モード: 無効 状態: 停止 名前: 分散トランザクション コーディネーター 開始モード: 手動 状態: 停止 名前: Windows インストーラー 開始モード: 手動状態: 停止 名前: ネットワーク アクセス保護エージェント 開始モード: 手動 状態: 停止 名前:Network DDE 開始モード: 無効 状態: 停止 名前: Network DDE DSDM 開始モード: 無効 状態: 停止 名前: Net Logon 開始モード: 自動 状態: 実行中 名前: ネットワーク接続 開始モード: 手動 状態: 実行 名前: Net.Tcp ポート共有サービス開始モード: 無効 状態: 停止 名前: Network Location Awareness (NLA) 開始モード: 手動 状態: 実行中 名前: NLCS エージェント開始モード: 自動 状態: 実行中 名前: NT LM セキュリティ サポート プロバイダー 開始モード: 無効 状態: 停止 名前:リムーバブル ストレージ 開始モード: 手動 状態: 停止 名前: Microsoft Office Diagnostics Service 開始モード: 無効 状態: 停止 名前:Office ソース エンジン 開始モード: 手動 状態: 停止 名前: プラグ アンド プレイ開始モード: 自動 状態: 実行中 名前: Pml Driver HPZ12 開始モード: 自動 状態: 停止 名前: IPSEC サービス 開始モード: 自動 状態: 実行中 名前: Protected Storage 開始モード: 自動 状態: 実行中 名前: リモート アクセス自動接続マネージャーの開始モード: 手動 状態: 停止 名前: リモート アクセス接続マネージャーの開始モード: 手動 状態: 停止 名前: リモート デスクトップ ヘルプ セッション マネージャーの開始モード: 手動 状態: 停止 名前: ルーティングおよびリモート アクセス開始モード: 無効状態: 停止名前: リモート レジストリ開始モード: 無効状態: 停止名前:リモート プロシージャ コール (RPC) ロケータ開始モード: 手動 状態: 停止 名前: リモート プロシージャ コール (RPC) 開始モード: 自動 状態: 実行中 名前: QoS RSVP 開始モード: 手動 状態: 停止 名前: Security Accounts Manager 開始モード: 自動 状態: 実行中 名前: スマート カード 開始モード: 手動 状態: 停止 名前: タスク スケジューラ 開始モード: 自動 状態: 実行中 名前: セカンダリ ログオン 開始モード: 自動 状態: 実行中 名前: システム イベント通知 開始モード: 自動 状態: 実行中 名前: Windowsファイアウォール/インターネット接続共有 (ICS) 開始モード: 自動 状態: 実行中 名前: シェル ハードウェア検出 開始モード: 自動 状態: 実行中 名前:印刷スプーラー 開始モード: 自動 状態: 実行中 名前: システム復元サービス 開始モード: 自動 状態: 停止 名前: SSDP 検出サービス 開始モード: 手動 状態: 実行中 名前: Windows Image Acquisition (WIA) 開始モード: 自動 状態: 実行中 名前: MS Software Shadow Copy Provider 開始モード: 手動 状態: 停止 名前: システム インターフェイス サービス 開始モード: 自動 状態: 実行中 名前: パフォーマンス ログとアラート 開始モード: 無効 状態: 停止 名前: テレフォニー 開始モード: 無効 状態: 停止 名前: ターミナルサービス開始モード: 手動 状態: 実行中 名前: テーマ 開始モード: 無効 状態: 停止 名前: Telnet 開始モード:無効 状態: 停止 名前: Distributed Link Tracking Client 開始モード: 自動 状態: 実行中 名前: ユニバーサル プラグ アンド プレイ デバイス ホスト 開始モード: 手動 状態: 停止 名前: 無停電電源装置 開始モード: 無効 状態: 停止 名前: ボリューム シャドウ コピー開始モード: 手動 状態: 停止 名前: Windows タイム 開始モード: 自動 状態: 実行中 名前: WebClient 開始モード: 自動 状態: 実行中 名前: Windows Defender 開始モード: 自動 状態: 実行中 名前: Windows Management Instrumentation 開始モード: 自動 状態: 実行中名前: Dell ワイヤレス WLAN トレイ サービス 開始モード: 自動 状態: 実行中 名前:Portable Media Serial Number Service 開始モード: 無効 状態: 停止 名前: Windows Management Instrumentation Driver Extensions 開始モード: 手動 状態: 停止 名前: WMI Performance Adapter 開始モード: 手動 状態: 停止 名前: Windows Media Player ネットワーク共有サービス 開始モード: 手動状態: 停止 名前: Security Center 開始モード: 自動 状態: 停止 名前: Windows Search 開始モード: 自動 状態: 実行中 名前: 自動更新 開始モード: 自動 状態: 実行中 名前: Windows Driver Foundation - ユーザーモード ドライバー フレームワークの開始モード:手動 状態: 停止 名前: ワイヤレス ゼロ構成 開始モード: 自動 状態: 停止 名前:Network Provisioning Service 開始モード: 手動 状態: 停止

プロセス:

名前: システム アイドル プロセス ワーキング セット: 28KB 名前: システム ワーキング セット: 244KB 名前: smss.exe ワーキング セット: 428KB 名前: csrss.exe ワーキング セット: 3984KB 名前: winlogon.exe ワーキング セット: 3944KB 名前: services.exe ワーキング セット名前: lsass.exe ワーキング セット: 5344KB 名前: ati2evxx.exe ワーキング セット: 3036KB 名前: svchost.exe ワーキング セット: 5076KB 名前: svchost.exe ワーキング セット: 5384KB 名前: MsMpEng.exe ワーキング セット: 39384KB 名前: svchost .exe ワーキング セット: 23792KB 名前: svchost.exe ワーキング セット: 4280KB 名前: svchost.exe ワーキング セット: 4944KB 名前: WLTRYSVC.EXE ワーキング セット: 1652KB 名前: BCMWLTRY.EXE ワーキング セット: 9820KB 名前: spoolsv.exe ワーキング セット:名前:svchost.exe ワーキング セット: 5356KB 名前: AppleMobileDeviceService.exe ワーキング セット: 4284KB 名前: mDNSResponder.exe ワーキング セット: 4368KB 名前: FlipShareService.exe ワーキング セット: 5316KB 名前: FrameworkService.exe ワーキング セット: 6048KB 名前: mcshield.exe ワーキング セット: 55800KB 名前: vstskmgr.exe ワーキング セット: 564KB 名前: mdm.exe ワーキング セット: 2748KB 名前: csagtprosvc.exe ワーキング セット: 5644KB 名前: naPrdMgr.exe ワーキング セット: 2044KB 名前: svchost.exe ワーキング セット: 4308KB 名前: searchindexer .exe ワーキング セット: 20460KB 名前: svchost.exe ワーキング セット: 21864KB 名前: unsecapp.exe ワーキング セット: 3828KB 名前: alg.exe ワーキング セット: 4336KB 名前: wmiprvse.exe ワーキング セット: 7576KB 名前:ati2evxx.exe ワーキング セット: 3600KB 名前: explorer.exe ワーキング セット: 33096KB 名前: SynTPEnh.exe ワーキング セット: 4736KB 名前: WLTRAY.EXE ワーキング セット: 6644KB 名前: MSASCui.exe ワーキング セット: 7824KB 名前: shstat.exe ワーキング セット: 820KB 名前: UdaterUI.exe ワーキング セット: 2304KB 名前: stsystra.exe ワーキング セット: 8100KB 名前: Mctray.exe ワーキング セット: 2396KB 名前: ctfmon.exe ワーキング セット: 3252KB 名前: DyKnowLogSender.exe ワーキング セット: 23972KBexe ワーキング セット: 2304KB 名前: stsystra.exe ワーキング セット: 8100KB 名前: Mctray.exe ワーキング セット: 2396KB 名前: ctfmon.exe ワーキング セット: 3252KB 名前: DyKnowLogSender.exe ワーキング セット: 23972KBexe ワーキング セット: 2304KB 名前: stsystra.exe ワーキング セット: 8100KB 名前: Mctray.exe ワーキング セット: 2396KB 名前: ctfmon.exe ワーキング セット: 3252KB 名前: DyKnowLogSender.exe ワーキング セット: 23972KB

4

2 に答える 2

1

私はかつてこの問題を抱えていました。そのため、しばらくしてからこの呼び出しを繰り返すことをお勧めします (Sleep を使用)。99% 動作する場合は、さらに数回試行すると動作する可能性があります。また、カウンターを追加して、無限ループがないようにします。

于 2010-02-20T20:05:52.587 に答える
0

Win32Wrapper.GetLastError は実際に GetLastError を呼び出していますか? その関数は、マネージ コードから確実に呼び出すことはできません。代わりに、エラーを設定するすべての関数 (この場合は WTSQueryUserToken) の DllImport 属性に SetLastError=true を追加し、Marshal.GetLastWin32Error() で結果を確認する必要があります。

于 2009-11-12T09:01:54.087 に答える