MCPcopy Create free account
hub / github.com/boku7/Loki / ReadSlot

Function ReadSlot

dev/execute_assembly/node_assembly_execute.cpp:191–270  ·  view source on GitHub ↗

Read Mailslot*/

Source from the content-addressed store, hash-verified

189
190/*Read Mailslot*/
191BOOL 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 }

Callers 1

RunAssemblyFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected