// Open the adapter SU_ADAPTER *SuOpenAdapter(SU *u, char *adapter_id) { char filename[MAX_PATH]; void *h; SU_ADAPTER *a; SL_IOCTL_EVENT_NAME t; UINT read_size; // Validate arguments if (u == NULL || adapter_id == NULL) { return NULL; } Format(filename, sizeof(filename), SL_ADAPTER_DEVICE_FILENAME_WIN32, adapter_id); h = CreateFileA(filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (h == INVALID_HANDLE_VALUE) { Debug("Create File %s failed. %u\n", filename, GetLastError()); return NULL; } else { Debug("Create File %s ok.\n", filename); } a = ZeroMalloc(sizeof(SU_ADAPTER)); StrCpy(a->AdapterId, sizeof(a->AdapterId), adapter_id); StrCpy(a->DeviceName, sizeof(a->DeviceName), filename); a->hFile = h; Zero(&t, sizeof(t)); // Get the event name if (DeviceIoControl(h, SL_IOCTL_GET_EVENT_NAME, &t, sizeof(t), &t, sizeof(t), &read_size, NULL) == false) { // Acquisition failure SuCloseAdapter(a); return NULL; } Debug("Event Name: %s\n", t.EventNameWin32); // Get the event a->hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, t.EventNameWin32); if (a->hEvent == NULL) { // Acquisition failure SuCloseAdapter(a); return NULL; } return a; }
// Close adapter void CloseEth(ETH *e) { BLOCK *b; // Validate arguments if (e == NULL) { return; } ReleaseCancel(e->Cancel); if (e->SuAdapter != NULL) { // Close SeLow adapter SuCloseAdapter(e->SuAdapter); SuFree(e->Su); } else { // Close SEE adapter wp->PacketCloseAdapter(e->Adapter); wp->PacketFreePacket(e->Packet); wp->PacketFreePacket(e->PutPacket); } while (b = GetNext(e->PacketQueue)) { FreeBlock(b); } ReleaseQueue(e->PacketQueue); Free(e->Name); Free(e->Title); Free(e->Buffer); Free(e); }