/ 一个数据结构,放在最外面的
typedef struct dbwin_buffer
{
DWORD dwProcessId;
char data[4096-sizeof(DWORD)];
}DEBUGBUFFER,*PDEBUGBUFFER;
/参数-----------放在form1中的
static HANDLE m;
static HANDLE m_AckEvent;
static HANDLE m_ReadyEvent;
static HANDLE m_SharedFile;
static HANDLE m_SharedMem;
static Thread^ m_Capturer;
static PDEBUGBUFFER pdbBuffer;
//写在一个方法中
//----------------------OpenMutex
m = OpenMutex( MUTEX_ALL_ACCESS, false, "DBWinMutex" );
if (m == NULL) {
throw gcnew Exception("Failed to create event 'DBWinMutex'");
}
//---------------------OpenEvent DBWIN_BUFFER_READY
m_AckEvent = OpenEvent(EVENT_ALL_ACCESS,false,"DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
m_AckEvent = CreateEvent(NULL, false, true, "DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER_READY'");
}
}
//-----------------------OpenEvent DBWIN_DATA_READY
m_ReadyEvent = OpenEvent(SYNCHRONIZE,FALSE,"DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
m_ReadyEvent = CreateEvent(NULL, false, false, "DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_DATA_READY'");
}
}
//-----------------------OpenFileMapping DBWIN_BUFFER
m_SharedFile = OpenFileMapping(FILE_MAP_READ,false,"DBWIN_BUFFER");
if (m_SharedFile == NULL) {
m_SharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "DBWIN_BUFFER");
if (m_SharedFile == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER'");
}
}
//可以就当是那段的内容 映射调试缓冲区
m_SharedMem = MapViewOfFile(m_SharedFile,SECTION_MAP_READ,0,0,0);
pdbBuffer = (PDEBUGBUFFER) MapViewOfFile(m_SharedFile, SECTION_MAP_READ, 0, 0, 0);
if (m_SharedMem == NULL) {
throw gcnew Exception("Failed to create event 'm_SharedMem'");
}
// Start a new thread where we can capture the output
// of OutputDebugString calls so we don't block here.
m_Capturer = gcnew Thread(gcnew ThreadStart(Capture));
m_Capturer->Start();
Capture 方法
private: static void Capture() {
try {
char *pp ;
int pid;
OutputDebugString("Hello World!" );
while (true) {
SetEvent(m_AckEvent);
int ret = WaitForSingleObject(m_ReadyEvent, 1000);
if (!m_Capturer)
break;
if (ret == WAIT_OBJECT_0){
pid = pdbBuffer->dwProcessId;
pp = pdbBuffer->data;
}
}
} catch(ios::failure& e){
throw gcnew Exception("Failed to create event 'Thread'");
// Cleanup
} finally {
aDispose();
}
}
//int2str 从int到String的转换
static
String^ int2str(int num)
{
if (num == 0 )
return " 0 " ;
String^ str = "" ;
int num_ = num > 0 ? num : - 1 * num;
while (num_)
{
str = ( char )(num_ % 10 + 48 ) + str;
num_ /= 10 ;
}
if (num < 0 )
str = " - " + str;
return str;
}
/aDispose 方法
private:
static void aDispose() {
//if(!m_Capturer){
// WaitForSingleObject(m_Capturer, INFINITE);
//}
// Close AckEvent
if (m_AckEvent != NULL) {
if (!CloseHandle(m_AckEvent)) {
throw gcnew Exception("Failed to create event 'm_AckEvent'");
}
m_AckEvent = NULL;
}
// Close ReadyEvent
if (m_ReadyEvent != NULL) {
if (!CloseHandle(m_ReadyEvent)) {
throw gcnew Exception("Failed to create event 'm_ReadyEvent'");
}
m_ReadyEvent = NULL;
}
// Close SharedFile
if (m_SharedFile != NULL) {
if (!CloseHandle(m_SharedFile)) {
throw gcnew Exception("Failed to create event 'm_SharedFile'");
}
m_SharedFile = NULL;
}
// Unmap SharedMem
if (m_SharedMem != NULL) {
if (!UnmapViewOfFile(m_SharedMem)) {
throw gcnew Exception("Failed to create event 'm_SharedMem'");
}
m_SharedMem = NULL;
}
// Close our mutex
if (m != NULL) {
CloseHandle(m);
m = NULL;
}
}
typedef struct dbwin_buffer
{
DWORD dwProcessId;
char data[4096-sizeof(DWORD)];
}DEBUGBUFFER,*PDEBUGBUFFER;
/参数-----------放在form1中的
static HANDLE m;
static HANDLE m_AckEvent;
static HANDLE m_ReadyEvent;
static HANDLE m_SharedFile;
static HANDLE m_SharedMem;
static Thread^ m_Capturer;
static PDEBUGBUFFER pdbBuffer;
//写在一个方法中
//----------------------OpenMutex
m = OpenMutex( MUTEX_ALL_ACCESS, false, "DBWinMutex" );
if (m == NULL) {
throw gcnew Exception("Failed to create event 'DBWinMutex'");
}
//---------------------OpenEvent DBWIN_BUFFER_READY
m_AckEvent = OpenEvent(EVENT_ALL_ACCESS,false,"DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
m_AckEvent = CreateEvent(NULL, false, true, "DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER_READY'");
}
}
//-----------------------OpenEvent DBWIN_DATA_READY
m_ReadyEvent = OpenEvent(SYNCHRONIZE,FALSE,"DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
m_ReadyEvent = CreateEvent(NULL, false, false, "DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_DATA_READY'");
}
}
//-----------------------OpenFileMapping DBWIN_BUFFER
m_SharedFile = OpenFileMapping(FILE_MAP_READ,false,"DBWIN_BUFFER");
if (m_SharedFile == NULL) {
m_SharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "DBWIN_BUFFER");
if (m_SharedFile == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER'");
}
}
//可以就当是那段的内容 映射调试缓冲区
m_SharedMem = MapViewOfFile(m_SharedFile,SECTION_MAP_READ,0,0,0);
pdbBuffer = (PDEBUGBUFFER) MapViewOfFile(m_SharedFile, SECTION_MAP_READ, 0, 0, 0);
if (m_SharedMem == NULL) {
throw gcnew Exception("Failed to create event 'm_SharedMem'");
}
// Start a new thread where we can capture the output
// of OutputDebugString calls so we don't block here.
m_Capturer = gcnew Thread(gcnew ThreadStart(Capture));
m_Capturer->Start();
Capture 方法
private: static void Capture() {
try {
char *pp ;
int pid;
OutputDebugString("Hello World!" );
while (true) {
SetEvent(m_AckEvent);
int ret = WaitForSingleObject(m_ReadyEvent, 1000);
if (!m_Capturer)
break;
if (ret == WAIT_OBJECT_0){
pid = pdbBuffer->dwProcessId;
pp = pdbBuffer->data;
}
}
} catch(ios::failure& e){
throw gcnew Exception("Failed to create event 'Thread'");
// Cleanup
} finally {
aDispose();
}
}
//int2str 从int到String的转换
static
String^ int2str(int num)
{
if (num == 0 )
return " 0 " ;
String^ str = "" ;
int num_ = num > 0 ? num : - 1 * num;
while (num_)
{
str = ( char )(num_ % 10 + 48 ) + str;
num_ /= 10 ;
}
if (num < 0 )
str = " - " + str;
return str;
}
/aDispose 方法
private:
static void aDispose() {
//if(!m_Capturer){
// WaitForSingleObject(m_Capturer, INFINITE);
//}
// Close AckEvent
if (m_AckEvent != NULL) {
if (!CloseHandle(m_AckEvent)) {
throw gcnew Exception("Failed to create event 'm_AckEvent'");
}
m_AckEvent = NULL;
}
// Close ReadyEvent
if (m_ReadyEvent != NULL) {
if (!CloseHandle(m_ReadyEvent)) {
throw gcnew Exception("Failed to create event 'm_ReadyEvent'");
}
m_ReadyEvent = NULL;
}
// Close SharedFile
if (m_SharedFile != NULL) {
if (!CloseHandle(m_SharedFile)) {
throw gcnew Exception("Failed to create event 'm_SharedFile'");
}
m_SharedFile = NULL;
}
// Unmap SharedMem
if (m_SharedMem != NULL) {
if (!UnmapViewOfFile(m_SharedMem)) {
throw gcnew Exception("Failed to create event 'm_SharedMem'");
}
m_SharedMem = NULL;
}
// Close our mutex
if (m != NULL) {
CloseHandle(m);
m = NULL;
}
}