ASP.NET で偽装する

温度計を Web Service にしてなんてことを考えて、Administrator 権限が必要な OpenLibSys を Web Service 化するには、偽装しなければならない。その他、きっとはまるだろうと思いつつ、やっぱり引っかかりますね。

Web.config で

<configuration>
  <system.web>
    <identity impersonate="true" userName="ホスト名\Administrator" password="パスワード" />
   …

と追加して、実行すると、

‘/’ アプリケーションでサーバー エラーが発生しました。 構成にエラーがあります。

説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。
パーサー エラー メッセージ: 構成ファイルで指定された資格情報から Windows ユーザー トークンを作成できません。オペレーティング システム ‘ログオン失敗: アカウントは現在無効に設定されています。
‘ のエラーです。

というエラーが発生。Vista では、Administrator アカウントが無効になっているので、

[管理ツール] → [ローカル セキュリティ ポリシー]

image

これを有効にしてみた。すると、このエラーは、無事解決。

しかし、InitializeOls(); を呼ぶところで引っかかっている。サービス側なので、デバッグが厄介だな・・・

この原因は、WinRing0.sys を Visual Studio のデバッグ環境で、Web Service から呼び出すときに、OlsDll.cpp の Initialize()関数の中で、ドライバーを呼び出すときにディレクトリが、 “C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0\WinRing0.sys” になってしまい、OLS_DLL_DRIVER_NOT_FOUND エラーになってしまう。暫定で、その場所に WinRing0.sys をコピーして先に進んでみる。

次に、Web Service をローカルの IIS に発行してみると、こんどは “c:\windows\system32\inetsrv\WinRing0.sys” を探しに行ってエラーになる。そこに、WinRing0.sys をコピーすることで、Web Service から OpenLibSys を呼び出せるようになった。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です