2010-12-10 22 views
0

生のヘッダー全体をファイルに取得しようとしていますが、コンテンツを書き込もうとするたびに、ファイルが完全に取得されます。私は間違って何をしていますか?ISAPIフィルタを使用してファイルにヘッダーを取得する

DWORD CTryISAPIFilter::OnPreprocHeaders(CHttpFilterContext* httpContext, 
    PHTTP_FILTER_PREPROC_HEADERS headerInformation) 
{ 


    char buffer[4096]; 
    DWORD bufferSize = sizeof(buffer); 

    BOOL HeaderBoolean = headerInformation->GetHeader(httpContext->m_pFC, "ALL_RAW", buffer, &bufferSize); 
    char * ptrIn = (char *) buffer; 
    std::string postData2 = ptrIn; 
    char * outputString = new char[4096]; 

    int i = 0; 
    for(i=0;i<4096;i++){ 
     outputString[i] = postData2[i]; 
    } 
    outputString[i+1] = NULL; 


    std::ofstream outfile ("D:\\WebSites\\wwwroot\\test.txt",std::ios::app); 

    outfile << outputString << std::endl; 

    outfile.close(); 
    return SF_STATUS_REQ_NEXT_NOTIFICATION; 
} 
+0

あなたは 'outputString [i + 1] = NULL;'がバッファオーバーランの原因になりますか? –

答えて

1

headerInformation->GetHeader()が成功しましたか?

もしそうなら、それは実際に

私はGetHeader()が失敗していると思われる、と何もbufferに書かされていない(おそらく、それはあなた、このことはbufferSizeに置く値に伝えます)bufferへの書き込みどのくらいある理由は次のとおりです。

  • あなたはあなたのインデックススローされた例外を取得していないすべての「ÌÌÌÌÌÌÌÌÌÌÌ」の文字(デバッグがVCのビルド何に初期化されていないメモリを設定します)、および
  • 取得しています通常、文字列の終わりになるべきものを去ります(ほとんどの場合、とにかく)。したがって、bufferには '\ 0'ターミネーターはありません(成功した場合はGetHeader()となります)。

このエラーを確認し、エラーの詳細については、GetLastError()を調べる必要があります。

更新:バッファーが十分に大きくない可能性があります。バッファのサイズを適切に調整する方法については、http://msdn.microsoft.com/en-us/magazine/cc163939.aspxを参照してください。

更新2:私はウェブのものをやってからしばらくしていましたが、ヘッダーではなくCGIスタイルのサーバー環境変数 "ALL_RAW"ではありませんか? GetHeader()の代わりにGetServerVariable()を使用して検索してはいけませんか?

+0

だから私はあなたが正しいと思う、MSのドキュメントに基づいて、データを取得しようとしている時点では利用できない場合があります。私はURL変数を言うことができます。私はGetServerVariablesを試みますが、私は多くの運がないと思います。とにかく、ありがとう。 –

関連する問題