Вот что я пытаюсь достичь; Я подключаюсь к функции HttpSendRequest (на Xbox это XHttp) и пытается сбросить сертификат, который находится в pcszHeaders, размер которого равен 0x1F0E.C++ WriteFile записывает только 4 байта
Теперь проблема; он только кажется, что пишет 4 байта, я даже попытался выделить дополнительную память и установить каждый бит в 0, чтобы увидеть, является ли это размером заголовков, и он продолжает писать только 4 байта. Я смог удаленно удалять файлы pcszHeaders, потому что я получил адрес во время отладки, но мне нужно сбросить его во время выполнения.
Что-то, что я замечаю во время отладки - адрес pcszHeaders отображается только в локальных сетях до тех пор, пока он не достигнет;
printf("XHttpSendRequest: %s\n", "Creating Certificate.bin...");
После того, как он достигнет Е() выше адрес изменяется на 0x00000000 (плохо PTR), но по-прежнему записывает первые байты правильных данных pcszHeaders правильно, но ничего больше.
Вот и весь крюк;
BOOL XHTTP_SEND_REQUEST_HOOK(
HINTERNET hRequest,
const CHAR *pcszHeaders,
DWORD dwHeadersLength,
const VOID *lpOptional,
DWORD dwOptionalLength,
DWORD dwTotalLength,
DWORD_PTR dwContext)
{
if(pcszHeaders != XHTTP_NO_ADDITIONAL_HEADERS)
{
printf("XHttpSendRequest: %s\n", "Creating Certificate.bin...");
// Setup expansion
doMountPath("Hdd:", "\\Device\\Harddisk0\\Partition1");
//create our file
HANDLE fileHandle = CreateFile("Hdd:\\Certificate.bin", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
//does file exist?
if(GetLastError()!=ERROR_ALREADY_EXISTS
||fileHandle!=INVALID_HANDLE_VALUE)
{
printf("XHttpSendRequest: %s\n", "Writing to file...");
DWORD wfbr;
//write to our file
if(WriteFile(fileHandle, pcszHeaders, 0x2000, &wfbr, NULL))
{
printf("XHttpSendRequest: %s\n", "File written!");
printf("%s\n", "Request has ended.");
CloseHandle(fileHandle);
return XHttpSendRequest(hRequest, pcszHeaders, dwHeadersLength, lpOptional, dwOptionalLength, dwTotalLength, dwContext);
}
}
}
}
EDIT: Я немного изменил код, и я скопировал данные pcszHeaders в другой раздел памяти, который я создал, и мои указатели, кажется, есть все правильные данные и я попытался Записав его в файл, и он все еще записывает только 4 байта. Я даже использовал sizeof() вместо жестко закодированного 0x2000.
** TL; DR; ** Используете ли вы 'sizeof ()' где-то, а не размер данных, указатель указывает на?!? –
άάτα ῥεῖ - Да, я пробовал это. – Corona
@Corona: В этом суть - НЕ используйте 'sizeof ()', это неправильно. –