// Release the event void NeoFreeEvent(NEO_EVENT *event) { // Validate arguments if (event == NULL) { return; } #ifdef WIN9X if (0) { if (event->win32_event != 0) { DWORD h = event->win32_event; _asm mov eax, h; VxDCall(_VWIN32_CloseVxDHandle); } } #endif WIN9X ZwClose(event->event_handle); // Release the memory NeoFree(event); }
// Set the event void NeoSet(NEO_EVENT *event) { // Validate arguments if (event == NULL) { return; } #ifndef WIN9X KeSetEvent(event->event, 0, FALSE); #else // WIN9X if (event->win32_event != 0) { DWORD h = event->win32_event; _asm mov eax, h; VxDCall(_VWIN32_SetWin32Event); } #endif // WIN9X }
void VXDINLINE VWIN32_DIOCCompletionRoutine( DWORD hEvent ) { _asm mov ebx, hEvent VxDCall( VWIN32_DIOCCompletionRoutine ); }
DWORD PacketClose(POPEN_INSTANCE Open,DWORD dwDDB,DWORD hDevice,PDIOCPARAMETERS pDiocParms) { NDIS_STATUS Status; NDIS_STATUS nsErrorStatus; UINT to; DWORD TEvent; TRACE_ENTER( "PacketClose" ); Open->BufSize=0; to=Open->ReadTimeoutTimer; Open->ReadTimeoutTimer=0; if(to!=0) { _asm push esi; _asm mov esi,to; CancelReadTimeOut(); _asm pop esi; } // Free the read event TEvent=Open->ReadEvent; _asm mov eax,TEvent; VxDCall(_VWIN32_CloseVxDHandle); //close the adapter NdisCloseAdapter(&nsErrorStatus,Open->AdapterHandle); if ( nsErrorStatus == NDIS_STATUS_PENDING ) { while ( Open->Status == NDIS_STATUS_PENDING ) YieldExecution(); if(Open->Status!=NDIS_STATUS_SUCCESS) { TRACE_LEAVE( "PacketClose" ); return NDIS_STATUS_FAILURE; } } else { PacketUnbindAdapterComplete( Open, nsErrorStatus ); if(nsErrorStatus!=NDIS_STATUS_SUCCESS) { TRACE_LEAVE( "PacketClose" ); return NDIS_STATUS_FAILURE; } } Status = Open->Status; if(Open->Buffer!=NULL)NdisFreeMemory(Open->Buffer,Open->BufSize,0); Open->Buffer=NULL; if(Open->bpfprogram!=NULL)NdisFreeMemory(Open->bpfprogram,Open->bpfprogramlen,0); //remove this adapter from the list of open adapters NdisAcquireSpinLock( &GlobalDeviceExtension->OpenSpinLock ); RemoveEntryList(&(Open->ListElement)); NdisReleaseSpinLock( &GlobalDeviceExtension->OpenSpinLock ); NdisFreeMemory( Open, sizeof( OPEN_INSTANCE ) , 0 ); if(pDiocParms!=NULL) *(DWORD *)(pDiocParms->lpcbBytesReturned) = 0; TRACE_LEAVE( "PacketClose" ); return Status; }