示例#1
0
// 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);
}
示例#2
0
// 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
}
示例#3
0
文件: epacket.c 项目: OPSF/uClinux
void VXDINLINE VWIN32_DIOCCompletionRoutine( DWORD hEvent )
{
  _asm mov ebx, hEvent
  VxDCall( VWIN32_DIOCCompletionRoutine );
}
示例#4
0
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;

}