次のコードでは:
// If GetPrinter didn't fill in the DEVMODE, try to get it by calling
// DocumentProperties...
if (pi2->pDevMode == NULL)
{
dwNeeded = DocumentProperties(NULL, hPrinter,
printerName,
NULL, NULL, 0);
if (dwNeeded <= 0)
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
return FALSE;
}
pDevMode = (DEVMODE *)GlobalAlloc(GPTR, dwNeeded);
if (pDevMode == NULL)
{
GlobalFree(pi2);
ClosePrinter(hPrinter);
return FALSE;
}
lFlag = DocumentProperties(NULL, hPrinter,
printerName,
pDevMode, NULL,
DM_OUT_BUFFER);
if (lFlag != IDOK || pDevMode == NULL)
{
GlobalFree(pDevMode);
GlobalFree(pi2);
ClosePrinter(hPrinter);
return FALSE;
}
pi2->pDevMode = pDevMode;
}
オンラインで
lFlag = DocumentProperties(NULL, hPrinter,
printerName,
pDevMode, NULL,
DM_OUT_BUFFER);
Visual Studio 2012 の「コード分析」機能を実行すると、次の警告がスローされます。
C6386 書き込みオーバーラン 'pDevMode' への書き込み中にバッファ オーバーランが発生しました: 書き込み可能なサイズは 'dwNeeded' バイトですが、'220' バイトが書き込まれる可能性があります。「pDevMode」への無効な書き込み (書き込み可能範囲外)
コードは正常に機能しますが、この警告が発生しないように修正する方法を知りたいです (できれば警告を無効にしないでください)。
このエラーのヘルプ ページは適用されないようです (または、適用方法がわかりません) http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(C6386) &rd=真