Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 785 of file netbios.c.
{ UCHAR ret, cmd; TRACE("ncb = %p\n", ncb); if (!ncb) return NRC_INVADDRESS; TRACE("ncb_command 0x%02x, ncb_lana_num %d, ncb_buffer %p, ncb_length %d\n", ncb->ncb_command, ncb->ncb_lana_num, ncb->ncb_buffer, ncb->ncb_length); cmd = ncb->ncb_command & 0x7f; if (cmd == NCBENUM) ncb->ncb_retcode = ncb->ncb_cmd_cplt = ret = nbEnum(ncb); else if (cmd == NCBADDNAME) { FIXME("NCBADDNAME: stub, returning success\n"); ncb->ncb_retcode = ncb->ncb_cmd_cplt = ret = NRC_GOODRET; } else { NetBIOSAdapter *adapter; /* Apps not specifically written for WinNT won't do an NCBENUM first, * so make sure the table has been enumerated at least once */ if (!gNBTable.enumerated) nbInternalEnum(); adapter = nbGetAdapter(ncb->ncb_lana_num); if (!adapter) ret = NRC_BRIDGE; else { if (adapter->shuttingDown) ret = NRC_IFBUSY; else if (adapter->resetting) ret = NRC_TOOMANY; else { /* non-asynch commands first */ if (cmd == NCBCANCEL) ncb->ncb_retcode = ncb->ncb_cmd_cplt = ret = nbCancel(adapter, ncb); else if (cmd == NCBSSTAT) ncb->ncb_retcode = ncb->ncb_cmd_cplt = ret = nbSStat(adapter, ncb); else { if (ncb->ncb_command & ASYNCH) { HANDLE thread = CreateThread(NULL, 0, nbCmdThread, ncb, CREATE_SUSPENDED, NULL); if (thread != NULL) { ncb->ncb_retcode = ncb->ncb_cmd_cplt = NRC_PENDING; if (ncb->ncb_event) ResetEvent(ncb->ncb_event); ResumeThread(thread); CloseHandle(thread); ret = NRC_GOODRET; } else ncb->ncb_retcode = ncb->ncb_cmd_cplt = ret = NRC_OSRESNOTAV; } else ncb->ncb_retcode = ncb->ncb_cmd_cplt = ret = nbDispatch(adapter, ncb); } } } } TRACE("returning 0x%02x\n", ret); return ret; }