(HTTPリクエストの結果として)IIS6によって起動されたアプリケーションは、dllの初期化に失敗しています。ダブルクリックしてローカルにログインしたときに管理者として起動すれば、すべて問題ありません。
このアプリは、サードパーティを介してTLS暗号化を利用しますDLL cryptlibと呼ばれます。 http://www.coastrd.com/smtps/cryptlib これは大したことではありません。ほとんどのCGIアプリはMySQL/zlib/...などのdllを問題なく使用しているため、この場合(おそらく、SSL/TLSセッションを作成する性質のため)、管理者としてダブルクリックして起動すると、アプリは正常に実行されます。ただし、着信リクエストの結果としてIISによって起動された場合は実行されません。IISはアカウント「インターネットゲストアカウント...(... IUSR ) "(想定)単純なWebページHTTP POSTリクエストからCGIアプリケーションを実行します。
アプリ、dll、フォルダーのIUSRアカウントを完全に制御しようとしましたが、喜びはありませんでした。次に、ProcMonを起動して、「ACCESSDENIED」の結果を探しました。私が見つけた唯一のものは、CreateFileの必要なアクセスの結果でした:属性の読み取り、削除、同期、破棄:開く、オプション:同期IO非アラート、C:\ WINDOWS\Debug\UserMode\ChkAcc.log
私のアプリケーションがそのログファイルに書き込んでいないので、これは不可解です(IISなので、なぜ問題が発生するのでしょうか?)
次に、Administratorの起動が成功した場合のProcMon出力をIUSRの起動と比較し、失敗した起動に「ReadFile」操作が存在しないことを発見しました。これに対してACCESSDENIEDエラーは発生しません。操作は発生しません。
Cl32.dllの一連の操作は、次のようになります。QueryOpenCreateFile CreateFileMapping QueryStandardInformationFile CreateFileMapping CreateFileMapping CloseFile Load Image ReadFile
これは、DLLが使用のためにメモリにロードされる場所だと思います。
(起動に失敗した場合の)ReadFile操作の代わりに、次のようになります。RegOpenKeyHKU\S-1-5-21-4122272316-1273673783-4216733774-1003 NAME NOT FOUND
ここで説明されている「バイパストラバースチェック」の問題のように少し震えました http://forums.iis.net/t/1153139.aspxhttp://technet.Microsoft.com/ en-us/library/cc739389(WS.10).aspx しかし、それでも問題は解決しませんでした。
この時点で、ユーザーアカウントとアクセス許可に関する私の知識の限界を大幅に超えています。 1つ明らかなことは、これは権限の問題です。問題は、どの許可ですか?
[〜#〜]追加[〜#〜]
管理者へのISURの追加:1。デスクトップの[マイコンピューター]を右クリックし、[管理]をクリックします。 2. [コンピューターの管理]ウィンドウが開いたら、[ローカルユーザーとグループ]を展開します。3。[グループ]を選択し、右ペインで[管理者]をダブルクリックします。 4. [追加]ボタンをクリックします。5。[詳細設定]、[今すぐ検索]の順にクリックし、IUSRを選択します。6。[OK]をクリックします。 7.IISを再起動します
これは問題を修正しませんでした。 Filemon v7.3を掘り起こしましたが、それはIUSRです。
er.exe:2240 OPEN C:\WINDOWS\system32\USERENV.dll SUCCESS Options: Open Access: 00100021
er.exe:2240 CLOSE C:\WINDOWS\system32\USERENV.dll SUCCESS
er.exe:2240 OPEN C:\WINDOWS\debug\UserMode\ChkAcc.log ACCESS DENIED MY-SERVER\IUSR_MY-SERVER
er.exe:2240 CREATE C:\WINDOWS\debug\UserMode\ChkAcc.log ACCESS DENIED MY-SERVER\IUSR_MY-SERVER
この時点で、これがどのような許可であるかについて、暗闇の中で刺し傷を負います:)
[〜#〜]追加[〜#〜]
ChkAcc.logファイルとUserModeフォルダーのアクセス許可を変更しました。また、高度なアクセス許可を確認したところ、アプリケーションとDLLの拒否が見つかりました。両方削除しました。 IISを再起動し、マシンを再起動しました。それでも運がありません。
ACCESSDENIEDが実際に問題なのかどうか疑問に思います。そのフォルダー内のファイルを作成して書き込むようにアプリを書き直しましたが、機能しました。
OPEN C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Options: OpenIf Access: 00120196
SET INFORMATION C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Length: 0
SET INFORMATION C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Length: 0
WRITE C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Offset: 0 Length: 41
WRITE C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Offset: 41 Length: 2
SET INFORMATION C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Length: 43
SET INFORMATION C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS Length: 43
CLOSE C:\WINDOWS\debug\UserMode\ChkAcc.txt SUCCESS
これにより、フォルダのアクセス許可はまったく問題ではないのではないかと思われますが、DLLが何らかの理由で初期化に失敗しています。
IUSRにADMINと同じ権限を与える方法はありますか?それなら多分私はそれらを一つずつ取り除くことができます。おそらく、管理者権限を持つ2番目のユーザーを作成し、着信CGI要求にIUSRの代わりにIISそれを使用することもできますか?
明らかにIUSRをADMINグループに追加することは、アプリをADMINとして実行することと同じではありません。
[〜#〜]追加[〜#〜]
実際、問題は、ファイルの読み取り機能など、起動時にdllがさまざまなサニティチェックテストを実行していることが原因であることが判明しました。これを行うために、ユーザーのホームディレクトリ(またはWindows用語ではユーザーのプロファイルディレクトリ)を読み取ろうとします。
Windows 2003 Serverボックスでのテストで、
IUSR
CSIDL_APPDATA = C:\ WINDOWS\system32\config\systemprofile\Application Data
管理者
CSIDL_APPDATA = C:\ Documents and Settings\Administrator.MY-SERVER\Application Data
Cgiプロセスがsystem32フォルダへのアクセスを拒否されていると思われます。これは、IUSRが管理者に追加されるまで私が期待する動作であり、その後はこれが機能することを期待します....それでも機能しません。解決策はdllを書き直すことでしたが、私はまだこれに戸惑っています
次の2行に注意してください。
er.exe:2240 OPEN C:\WINDOWS\debug\UserMode\ChkAcc.log ACCESS DENIED MY-SERVER\IUSR_MY-SERVER
er.exe:2240 CREATE C:\WINDOWS\debug\UserMode\ChkAcc.log ACCESS DENIED MY-SERVER\IUSR_MY-SERVER
最初の行は、存在するかどうかをチェックするアプリケーションである可能性があり、2番目の行は、「存在しない場合はファイルを作成する」状況になります。私が探しているのは、IUSRアカウントは「USERS」グループの一部ではなく「GUESTS」の一部であり、通常、ゲストの特権は「USERS」よりもさらに少ないということです。 IUSRアカウントが、その上のフォルダーをトラバースできることを確認することをお勧めします。 IUSRアカウントに、フォルダーをトラバースするための明示的なアクセス権と、「UserMode」フォルダーに対する「ファイルの作成」へのアクセス許可を与えてみてください(ただし、「このフォルダーのみ」)。
最後に、フォルダへのアクセスを妨げる可能性のあるゲストに対する明示的な「拒否」権限がある可能性があります。それらは私がチェックするものです。