buf фактически присваивается значению (LPBYTE) LockResource(LoadResource(NULL, hRsrc));
, есть предположения, что это нулевое окончание?
Зависит от типа ресурса, но, скорее всего, нет.В любом случае, поскольку вы работаете с ресурсами, вы можете получить размер ресурса с помощью функции SizeofResource
.
Тем не менее, я не уверен, что вы можете писать о материалах, возвращаемых LockResource
(фактически он возвращает указатель на область, содержащую ресурс, который, вероятно, является просто областью в исполняемом файле с отображением в памяти).Скорее всего, вы захотите скопировать его в другое место, прежде чем XORing.
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;