それがnullで終了だ場合bufが実際に(LPBYTE) LockResource(LoadResource(NULL, hRsrc));
の値は、いずれかの推測に割り当てていますか?
リソースのタイプにもよりますが、ほとんどの場合はありません。とにかく、リソースを使って作業しているので、SizeofResource
関数を使用してリソースサイズを取得できます。
LockResource
によって返されたものに書き込むことができるかどうかはまだ分かりません(実際には、メモリマップされた実行可能ファイルの領域であるリソースを含む領域へのポインタを返します)。おそらく、XORする前に他の場所にコピーしたいと思うでしょう。
HGLOBAL resource=LoadResource(NULL, hRsrc);
if(resource==NULL)
{
// ... handle the failure ...
}
LPBYTE resPtr=LockResource(resource);
DWORD resSize=SizeofResource(NULL, hRsrc);
if(resPtr==NULL || resSize==0)
{
// ...
}
std::vector<BYTE> buffer(resPtr, resPtr+resSize);
// Now do whatever you want to do with your buffer
for(size_t i=0; i<buffer.size(); ++i)
buffer[i]^=key;
'LPBYTE'は、役立つ場合には' unsigned char * 'と同じです。 –
バッファへの 'LPBYTE' _points_です。 –
'LPBYTE'が指し示すデータがヌル文字で終わらない限り(そしてそれは確かに「文字列のようなデータ型」を叫ばないでください)、それがどれくらい長いかを発見する方法はありません。 –