2016-09-13 16 views
0

顧客は私たちのプログラムの1つ、通常はサービスとしてアプリケーションとしてアプリケーションを実行しています。顧客はCoRegisterClassObject()上で、次のエラーを取得している:CoRegisterClassObjectがエラーを返します(セッション0?)

クラスは、発信者とは別のセキュリティIDで実行するように設定されています。

セッション0のエラーのようですが、なぜセッション0について気にする必要がありますか?CoRegisterClassObject() COMはサービス(セッション0)とアプリケーション(セッション> 0)の両方を許可する必要があります。

また、マイクロソフトのドキュメントのWebページに記載されているように、返されるエラーのリストにはCoRegisterClassObject()が含まれていません。

+0

あなたはどのフレームワークについて取り組んでいますか?おそらくこれを質問のタグとして追加してください。 – Hayt

答えて

0

問題のエラーコードはCO_E_WRONG_SERVER_IDENTITY(0x80004015)です。このページ毎の

COM security frequently asked questions

Q6なぜのCoRegisterClassObjectリターンCO_E_WRONG_SERVER_IDENTITYしていますか? .exeファイルとしてATL 1.1サーバーサービスを起動すると、CoRegisterClassObjectからCO_E_WRONG_SERVER_IDENTITYが受信されます。 (クラスは呼び出し元とは異なるセキュリティIDとして実行するように設定されています)。これはCoInitializeSecurityをスキップするかどうかに関係なく発生しているようです。サービスとして実行されたり、.exeファイルとして実行されません。

A.多くのサービスは、対話型ユーザーIDでコンソールアプリケーションとして実行することによってデバッグされます。サービスが既に別のIDで実行されるように登録されているため(サービスコントロールパネルアプレットで設定可能)、CO_E_WRONG_SERVER_IDENTITYを返してCoRegisterClassObjectおよびRunningObjectTable :: Register(ROTFLAGS_ALLOWANYCLIENT)呼び出しを失敗させ、セキュリティを強化し、悪意のあるサーバーがサーバーを偽装することを防ぎます。 。インタラクティブなユーザーのIDで実行してデバッグするには、これらの障害を防ぐために、サーバーのレジストリエントリで次のように変更します。

[HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}] 
"LocalService"="HelloOleServerService" 

•防ぐために:

•削除、次の名前付き値をのCoRegisterClassObjectの障害を防ぐためにIRunningObjectTable ::登録(ROTFLAGS_ALLOWANYCLIENT)失敗、次の手順を実行します。

  1. 次の名前付き値の削除:

    を10
    [HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}] 
    "LocalService"="HelloOleServerService" 
    
  2. そして、次の名前付き値を追加します:あなたは、デバッグ後に変更されたレジストリエントリを復元muist

    [HKEY_CLASSES_ROOT\APPID\{0bf52b15-8cab-11cf-8572-00aa00c006cf}] 
    "RunAs"="Interactive User" 
    

を。

{0bf52b15-8cab-11cf-8572-00aa00c006cf}をCOMオブジェクトの実際のCLSIDに置き換える必要があるとします。

関連する問題