/********************************************************/ /* ntapi: Native API core library */ /* Copyright (C) 2013--2017 Z. Gilboa */ /* Released under GPLv2 and GPLv3; see COPYING.NTAPI. */ /********************************************************/ #include #include #include #include #include #include "ntapi_impl.h" int32_t __cdecl __ntapi_sc_shutdown( __in nt_socket * hssocket, __in uint32_t afdhow, __out nt_iosb volatile * iosb __optional) { nt_afd_disconnect_info afd_disconnect; nt_iosb volatile siosb; iosb = iosb ? iosb : &siosb; if (afdhow & ~(NT_AFD_DISCONNECT_RD | NT_AFD_DISCONNECT_WR)) return NT_STATUS_INVALID_PARAMETER; afd_disconnect.shutdown_flags = afdhow; afd_disconnect.unknown[0] = 0xff; afd_disconnect.unknown[1] = 0xff; afd_disconnect.unknown[2] = 0xff; hssocket->iostatus = __ntapi->zw_device_io_control_file( hssocket->hsocket, hssocket->hevent, 0, 0, iosb, NT_AFD_IOCTL_DISCONNECT, &afd_disconnect, sizeof(afd_disconnect), 0, 0); return hssocket->iostatus ? __ntapi->sc_wait(hssocket,iosb,0) : NT_STATUS_SUCCESS; }