この記事は、不明な環境変数が使用されたときにログに記録されるグループ ポリシー エラー イベントを回避するのに役立ちます。
元の KB 番号: 2003730
現象
Active Directory フォレストを実行していて、ファイル システムのセキュリティ ポリシーを使用している場合は、次のイベントがログに記録されることがあります。
Windows Vista、Windows Server 2008、Windows 7、および Windows Server 2008 R2 では、このイベントがグループ ポリシー操作ログに記録されます。
ログ名: Microsoft-Windows-GroupPolicy/Operational
ソース: Microsoft-Windows-GroupPolicy
イベント ID: 7016
タスク カテゴリ: なし
レベル: エラー
キーワード:
ユーザー: SYSTEM
説明:
20984 ミリ秒でセキュリティ拡張機能の処理が完了しました。
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
...
<EventData>
<Data Name="CSEElaspedTimeInMilliSeconds">20984</Data>
<Data Name="ErrorCode">1252</Data>
<Data Name="CSEExtensionName">Security</Data>
<Data Name="CSEExtensionId">{827D319E-6EAC-11D2-A4EA-00C04F79F83A}</Data>
</EventData>
</出来事>Windows XP と Windows Server 2003 では、このイベントがアプリケーション ログに記録されます。
イベント ID: 1091
カテゴリ: なし
ソース: Userenv
型エラー:
メッセージ: グループ ポリシーのクライアント側拡張機能のセキュリティが RSOP (ポリシーの結果セット) データをログに記録できませんでした。 その拡張機能によって以前に報告されたエラーを探します。すべての Windows バージョンでは、このイベントがアプリケーション ログに記録されます。
イベント ID: 1202
カテゴリ: なし
ソース: SceCli
種類: 警告
メッセージ: セキュリティ ポリシーは警告と共に伝達されました。 0xd: データが無効です。
実際のポリシー構成によっては、セキュリティ ポリシーの設定が存在する場合と存在しない場合があります。 詳細情報セクションでは、(エラーにもかかわらず) ポリシーの失敗または成功の条件について説明します。
原因
1 つのポリシーのファイル システム のセキュリティ設定に、クライアント コンピューターで不明な環境変数が含まれているため、イベントがログに記録されます。 問題の詳細を確認するには、セキュリティ構成のクライアント側拡張機能のログ記録を有効にします。
%windir%\security\logs\winlogon.log ファイルには、次のようなエントリが表示されます。
GP テンプレート gpt0000x.inf を処理します。
エラー 13: データが無効です。
%PROGRAMFILES(X86)%\MyApplication の変換中にエラーが発生しました。
%PROGRAMFILES(X86)% は一例にすぎません。 これは、ポリシーが 64 ビット バージョンの Windows で編集され、C:\PROGRAM FILES (X86) フォルダーまたはそのサブフォルダーのセキュリティ設定が行われるときに使用されます。
ポリシー設定を含むテキスト ファイルである gpt0000x.inf ファイルは、%windir%\security\templates\policies フォルダーにあります。 また、 GPOPath 以降の行に Active Directory 内のポリシーの場所が含まれており、不明な環境変数を持つポリシーを識別できます。
解決方法
この問題を回避するには、不足している環境変数を参照する設定を受け取る同じレベルで新しいポリシーを作成します。 次に、WMI フィルターを使用して、環境変数が定義されているマシンにのみポリシーを適用できるようにします。
たとえば、%PROGRAMFILES(X86)% の WMI フィルターは次のようになります。
名前 = 'PROGRAMFILES(X86)' Win32_Envrionmentから * を選択します
詳細
このセクションでは、ポリシー設定が正常に適用される場合もあれば、適用されない場合がある理由について説明します。
セキュリティ グループ ポリシーは、Winlogon.exe プロセス内で実行されているUserenv.dll ライブラリ、または Windows Vista 以降のグループ ポリシー サービス (GPSvc) によって実行されます。 これは、マシンに割り当てられているポリシーの一覧を取得し、適用されないポリシーを除外するコンポーネントです。 ポリシーまたは WMI フィルターのアクセス許可に基づいてフィルター処理できます。
Userenv/GPSvc は、優先度に基づいてポリシーを並べ替えます。 最初に適用されるポリシーは優先度が最も低いポリシーで、最後のポリシーは優先度が最も高いポリシーです。 セキュリティ ポリシーの場合、Userenv/GPSvc は、SYSVOL からダウンロードしたポリシー設定ファイルを使用してセキュリティ ポリシー クライアント側拡張機能 (SCECLI) を呼び出します。
SCECLI には 2 つのフェーズがあります。 最初のフェーズでは、渡された設定を受け取り、セキュリティ データベースにフィードします。 2 番目のフェーズでは、ユーザー権限の設定、セキュリティ オプションの設定、レジストリとファイルのセキュリティ記述子の設定など、これらの設定をシステムに適用します。
最初のフェーズは、最後のポリシーが処理されるまでアクティブです。 最後のポリシーに対する Userenv/GPSvc から SCECLI への呼び出しは特殊なケースです。 呼び出しが行われると、最初のフェーズはまだアクティブであり、最後のポリシーの設定は、他のすべてのポリシーと同様にセキュリティ データベースに読み込まれます。 ただし、呼び出しが戻る前に、SCECLI はこれが最後のポリシーであることを確認し、同じ呼び出し内で 2 番目のフェーズを実行します。
レジストリおよびファイル システム ポリシーの設定は、コミットにコストがかかると見なされます。SCECLI は、フォアグラウンド モードで呼び出し元のスレッドで実行しません。 これらの設定では、Userenv/GPSvc によって追加のスレッドが作成されるため、ユーザーが既にログオンできる間に処理を完了できます。 ドメイン コントローラーは、この規則の例外です。 ユーザーがログオンする前に、常にすべてのセキュリティ ポリシー アプリケーションが完了します。
不足している環境変数に関して、SCECLI は最初のフェーズで設定を読み取り、環境変数を実際のパスに解決するとエラーが発生します。 SCECLI はエントリをスキップし、セキュリティ データベースに設定を追加し続け、後で Userenv/GPSVC にエラーを返します。
最後のポリシー以外のポリシーで問題が発生すると、Userenv/GPSVC はエラーを致命的な問題として扱い、セキュリティ グループ ポリシーを中止します。 したがって、2 番目のフェーズは発生しません。 最後のポリシーで問題が発生すると、SCECLI はエラーを無視し、2 番目のフェーズを実行します。 Userenv/GPSVC は引き続きエラーでポリシー アプリケーションを中止しますが、実際にはこの時点でポリシー処理が完了しています。
データ収集
Microsoft サポートからのサポートが必要な場合は、グループ ポリシーの問題に TSS を使用して Gather 情報に記載されている手順に従って情報を収集することをお勧めします。