Я пытаюсь отладить службу Windows C ++, когда выдается следующее исключение (только в режиме отладки, в действительности это исключение не выдается):
«Исключение, выданное в 0x00007FF75127C410 в xxxxxxxx.exe: 0xC0000005: Место записи нарушения прав доступа 0x0000018818AF3000».
Важное замечание:
код работал для меня раньше, но, возможно, некоторые изменения в рабочей области повредили его. когда это работало, я разрабатывал в VS 17, я недавно изменил IDE на VS 19. Когда возникла проблема, я попытался вернуться к VS 17, но это не сработало.
- НИЧЕГО В КОДЕКЕ НЕ ИЗМЕНИЛОСЬ! это та же версия, что работала до
- Я пытался вернуться к VS 17
- Я попытался изменить конфигурацию проекта, такую как «базовые проверки времени выполнения» или «Библиотека времени выполнения», потому что я не могу понять, почему DEBUG и RELEASE работают по-разному в этом сценарии
EDIT:
USHORT logFileHeaderVersion;
DLLS_CHECK_MODE eDllCheckMode;
LONGLONG lastClientTimeZValue;
LONGLONG lastServerClientTimeDelta;
wstring computerName;
string macAddresses;
BYTE* buffer;
DWORD dwBytesToWrite = 0;
DWORD dwBytesWritten = 0;
logFileHeaderVersion = LOG_FILE_HEADER_VERSION;
eDllCheckMode = getConfigurationManager()->getDllsCheckMode();
lastClientTimeZValue = Globals::getLastClientTimeZValue();
lastServerClientTimeDelta = Globals::getLastServerClientTimeDelta();
computerName = getComputerName();
macAddresses = getMacAddresses();
// Convert time delta values from ticks to milliseconds.
lastClientTimeZValue = lastClientTimeZValue / MILLISECOND_IN_TICKS;
lastServerClientTimeDelta = lastServerClientTimeDelta / MILLISECOND_IN_TICKS;
// Determine header size.
dwBytesToWrite += 2; // Header-size size.
dwBytesToWrite += 2; // Header version size.
dwBytesToWrite += 1; // Mode size.
dwBytesToWrite += 8; // Client time Z value size.
dwBytesToWrite += 8; // Server client time delta size.
dwBytesToWrite += ( (computerName.size() + 1) * 2 ); // Computer name size (+ null terminator, wide string).
dwBytesToWrite += ( macAddresses.size() + 1 ); // Mac addresses size (+ null terminator).
// Allocate the header.
buffer = new BYTE[dwBytesToWrite];
// Fill the header.
*((USHORT*) (buffer + dwBytesWritten)) = (USHORT) dwBytesToWrite;
dwBytesWritten += 2;
*((USHORT*) (buffer + dwBytesWritten)) = logFileHeaderVersion;
dwBytesWritten += 2;
*((BYTE*) (buffer + dwBytesWritten)) = (BYTE) eDllCheckMode;
dwBytesWritten += 1;
*((LONGLONG*) (buffer + dwBytesWritten)) = lastClientTimeZValue;
dwBytesWritten += 8;
*((LONGLONG*) (buffer + dwBytesWritten)) = lastServerClientTimeDelta;
dwBytesWritten += 8;
wcscpy_s( (PWCHAR)(buffer + dwBytesWritten), dwBytesToWrite - dwBytesWritten, computerName.c_str());
dwBytesWritten += ( (computerName.size() + 1) * 2 );
Исключение выдается в следующей строке: я думаю, что это связано с использованием wstring. и, возможно, RELEASE, предварительно выполнив некоторую оптимизацию, которая исправит проблему в DEBUG
wcscpy_s( (PWCHAR)(buffer + dwBytesWritten), dwBytesToWrite - dwBytesWritten, computerName.c_str());