2011-07-12 66 views
0

Windows XP(Windows 7のVirtual PC)で開発中のアプリケーションを実行すると予期しないエラーが発生しました。 Windows 7 64-bit ProfessionalでVisual Studio 2010を使用してコンパイルしています。ICH_REJECT_USERPWDフラグをWindows 7では動作しますが、Windows XPでは動作しません(Virtual PC使用)

私はXPで正しく作成されていないURLまで問題を追跡しました。

URL_COMPONENTS components; 
memset(&components, 0, sizeof(URL_COMPONENTS)); 
components.dwStructSize = sizeof(URL_COMPONENTS); 
components.lpszScheme = L"http"; 
components.dwSchemeLength = 4; 
components.lpszHostName = L"google.com"; 
components.dwHostNameLength = 10; 
components.nScheme = INTERNET_SCHEME_HTTP; 
components.nPort = 80; 
DWORD len = 0; 
DWORD flags = ICU_REJECT_USERPWD; 
if(!WinHttpCreateUrl(&components, flags, NULL, &len)) { 
    WChar buf[256]; 
    wsprintf(buf, L"Error code %08X", GetLastError()); 
    MessageBox(NULL, buf, L"FAILURE", NULL); 
} 

私はそれが正しいサイズにLENを設定し、ERROR_INSUFFICIENT_BUFFERを示すために、0x7Aののエラーコードを与えることを期待 - 以下は、私がこれを表示するために一緒に入れ、小さなテストベッドです。これはWindows 7で起こります。Windows XPでは実際には0x57というエラーコードが表示され、ERROR_INVALID_PARAMETERと表示されます。

フラグの値をゼロに設定すると、両方のオペレーティングシステムで正常に動作します。私が解決しようとしているのは、なぜICU_REJECT_USERPWDがXPの下で失敗する原因です。

この例ではフラグを設定する必要はありませんが、これは問題を表示するためにまとめたテストコードです。

多く、この問題を持つ任意の助けに感謝します(または私が間違ってやっていると指摘誰にも...)

答えて

0

XPでICH_REJECT_PASSWORDフラグを使用するWinHttpCrackURLを取得できません。 msdnの例から始める http://msdn.microsoft.com/en-us/library/aa384092(v=vs.85).aspx

バッファを設定すると、ICU_DECODEとICU_ESCAPEが正常に動作します。 ただし、ICU_REJECT_PASSWORDを渡すと常に失敗し、GetLastErrorは0x00000057(ERROR_INVALID_PARAMETER)を返します。

ドキュメントに記載されている内容にもかかわらず、実際にXPではこのフラグがサポートされていないと思います。

+0

MSDNのサンプルコードも試しました。 ICU_REJECT_PASSWORDフラグでWindows 7上で正常に動作しますが、XPでは惨めに失敗します。私はそれがちょうどXPでは動作しないことに同意する必要があります。 – Rok

1

あなたは80にINTERNET_SCHEME_HTTP、およびcomponents.nPortにcomponents.nSchemeを設定したらどう?ドキュメントでは、文字列ポイントがNULLであり、0がnSchemeの有効な値にマップされないことのみが指定されています。

また、dwSchemeLengthとdwHostNameLengthを設定すると、終了するNULLの組み込みに一貫性がありません。あなたが実際にこれを行うことになっているかどうかはわかりません。ドキュメンテーションは指定されていないようですが、おそらく私は推測できません。

dwSchemeLengthを4に設定し、dwHostNameLengthを10に設定するとどうなりますか?それでも問題が解決しない場合は、5と11に設定してみてください。

私の推測では、これは開始に役立つかもしれません。

+0

よく** dwSchemeLength **で見つかった!それは問題ではありませんでしたが、修正が必要でした(私は実際のアプリでhttpsを使用していましたが、その例では長さを正しく変更していませんでした)。私は補完のための構造要素を追加しました(彼らはすでに私の主なアプリに入っていましたが、私はそれらを削除しました。ヌルターミネータを含むように長さを設定して試してみることをお勧めしますが、残念ながら問題は解決しませんでした。私はまた、それが構造と関係するものでなければならないと思うが、それが何であるかを見ることはできない。 – Rok

+1

OK、次のアイデア:MSDNのドキュメントでは、まずURLをクラックし、クラックされたURLから作成するサンプルを提供しています。http://msdn.microsoft.com/en-us/library/aa384093(VS.85).aspx 。このサンプルを修正して、必要なフラグを使用するとどうなりますか?サンプルが正常に機能している場合は、クラックされたURL構造を調べて、相違点の位置を確認します。 –

+0

それは素晴らしい考えでした。 ICU_REJECT_PASSWORDが設定されている場合でも、サンプルでは機能しません。バッファサイズを取得しようとすると失敗し、URLを構築しようとすると失敗します。そのフラグはXP互換ではないようです。 – Rok

関連する問題