Read Mailslot*/
| 189 | |
| 190 | /*Read Mailslot*/ |
| 191 | BOOL ReadSlot(char* output, HANDLE* mailHandle) |
| 192 | { |
| 193 | DWORD cbMessage = 0; |
| 194 | DWORD cMessage = 0; |
| 195 | DWORD cbRead = 0; |
| 196 | BOOL fResult; |
| 197 | LPSTR lpszBuffer = NULL; |
| 198 | size_t size = 65535; |
| 199 | char* achID = (char*)intAlloc(size); |
| 200 | memset(achID, 0, size); |
| 201 | DWORD cAllMessages = 0; |
| 202 | HANDLE hEvent; |
| 203 | OVERLAPPED ov; |
| 204 | |
| 205 | hEvent = Api.CreateEventA(NULL, FALSE, FALSE, NULL); |
| 206 | if (NULL == hEvent) |
| 207 | return FALSE; |
| 208 | ov.Offset = 0; |
| 209 | ov.OffsetHigh = 0; |
| 210 | ov.hEvent = hEvent; |
| 211 | |
| 212 | fResult = Api.GetMailslotInfo(*mailHandle, //Mailslot handle |
| 213 | (LPDWORD)NULL, //No maximum message size |
| 214 | &cbMessage, //Size of next message |
| 215 | &cMessage, //Number of messages |
| 216 | (LPDWORD)NULL); //No read time-out |
| 217 | |
| 218 | if (!fResult) |
| 219 | { |
| 220 | return FALSE; |
| 221 | } |
| 222 | |
| 223 | if (cbMessage == MAILSLOT_NO_MESSAGE) |
| 224 | { |
| 225 | return TRUE; |
| 226 | } |
| 227 | |
| 228 | cAllMessages = cMessage; |
| 229 | |
| 230 | while (cMessage != 0) //Get all messages |
| 231 | { |
| 232 | //Allocate memory for the message. |
| 233 | lpszBuffer = (LPSTR)Api.GlobalAlloc(GPTR, lstrlenA((LPSTR)achID) * sizeof(CHAR) + cbMessage); |
| 234 | if (NULL == lpszBuffer) |
| 235 | return FALSE; |
| 236 | lpszBuffer[0] = '\0'; |
| 237 | |
| 238 | fResult = Api.ReadFile(*mailHandle, |
| 239 | lpszBuffer, |
| 240 | cbMessage, |
| 241 | &cbRead, |
| 242 | &ov); |
| 243 | |
| 244 | if (!fResult) |
| 245 | { |
| 246 | Api.GlobalFree((HGLOBAL)lpszBuffer); |
| 247 | return FALSE; |
| 248 | } |