传递消息的结构体:
struct dbwin_buffer
{
DWORD dwProcessId;
char data[4096 - sizeof(DWORD)];
};
具体实现,直接艹代码:
void my_outputdebugstring_ansci(const char *msg)
{
HANDLE mutex = CreateMutexW(NULL, FALSE, L"DBWinMutex");
DWORD err = GetLastError();
if (mutex)
{
err = WaitForSingleObject(mutex, INFINITE);
}
HANDLE file_mapping = OpenFileMappingW(FILE_MAP_WRITE, FALSE, L"DBWIN_BUFFER");
if (file_mapping)
{
PBYTE data = (PBYTE)MapViewOfFile(file_mapping, FILE_MAP_WRITE, 0, 0, 0);
if (data)
{
HANDLE event_buffer = OpenEventW(SYNCHRONIZE, FALSE, L"DBWIN_BUFFER_READY");
if (event_buffer)
{
WaitForSingleObject(event_buffer, 10000);
}
struct dbwin_buffer *dbw_buffer = (struct dbwin_buffer *)data;
dbw_buffer->dwProcessId = GetCurrentProcessId();
memcpy(dbw_buffer->data, msg, strlen(msg));
dbw_buffer->data[strlen(msg)] = '\0';
HANDLE event_data = OpenEventW(EVENT_MODIFY_STATE, FALSE, L"DBWIN_DATA_READY");
if (event_data)
{
SetEvent(event_data);
}
UnmapViewOfFile(data);
CloseHandle(event_buffer);
CloseHandle(event_data);
}
CloseHandle(file_mapping);
}
ReleaseMutex(mutex);
return ;
}