/* * IFSMGR VxD implementation * * Copyright 1998 Marcus Meissner * Copyright 1998 Ulrich Weigand * Copyright 1998 Patrik Stridvall * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ /* NOTES * These ioctls are used by 'MSNET32.DLL'. * * I have been unable to uncover any documentation about the ioctls so * the implementation of the cases IFS_IOCTL_21 and IFS_IOCTL_2F are * based on reasonable guesses on information found in the Windows 95 DDK. */ #include #include "windef.h" #include "winbase.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(vxd); /* * IFSMgr DeviceIO service */ #define IFS_IOCTL_21 100 #define IFS_IOCTL_2F 101 #define IFS_IOCTL_GET_RES 102 #define IFS_IOCTL_GET_NETPRO_NAME_A 103 struct win32apireq { unsigned long ar_proid; unsigned long ar_eax; unsigned long ar_ebx; unsigned long ar_ecx; unsigned long ar_edx; unsigned long ar_esi; unsigned long ar_edi; unsigned long ar_ebp; unsigned short ar_error; unsigned short ar_pad; }; static void win32apieq_2_CONTEXT(const struct win32apireq *pIn, CONTEXT *pCxt) { memset(pCxt,0,sizeof(*pCxt)); pCxt->ContextFlags=CONTEXT_INTEGER|CONTEXT_CONTROL; pCxt->Eax = pIn->ar_eax; pCxt->Ebx = pIn->ar_ebx; pCxt->Ecx = pIn->ar_ecx; pCxt->Edx = pIn->ar_edx; pCxt->Esi = pIn->ar_esi; pCxt->Edi = pIn->ar_edi; /* FIXME: Only partial CONTEXT_CONTROL */ pCxt->Ebp = pIn->ar_ebp; /* FIXME: pIn->ar_proid ignored */ /* FIXME: pIn->ar_error ignored */ /* FIXME: pIn->ar_pad ignored */ } static void CONTEXT_2_win32apieq(const CONTEXT *pCxt, struct win32apireq *pOut) { memset(pOut,0,sizeof(struct win32apireq)); pOut->ar_eax = pCxt->Eax; pOut->ar_ebx = pCxt->Ebx; pOut->ar_ecx = pCxt->Ecx; pOut->ar_edx = pCxt->Edx; pOut->ar_esi = pCxt->Esi; pOut->ar_edi = pCxt->Edi; /* FIXME: Only partial CONTEXT_CONTROL */ pOut->ar_ebp = pCxt->Ebp; /* FIXME: pOut->ar_proid ignored */ /* FIXME: pOut->ar_error ignored */ /* FIXME: pOut->ar_pad ignored */ } extern void __wine_call_int_handler( CONTEXT *context, BYTE intnum ); /*********************************************************************** * DeviceIoControl (IFSMGR.VXD.@) */ BOOL WINAPI IFSMGR_DeviceIoControl(DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned, LPOVERLAPPED lpOverlapped) { TRACE("(%d,%p,%d,%p,%d,%p,%p): stub\n", dwIoControlCode, lpvInBuffer,cbInBuffer, lpvOutBuffer,cbOutBuffer, lpcbBytesReturned, lpOverlapped); switch (dwIoControlCode) { case IFS_IOCTL_21: case IFS_IOCTL_2F: { CONTEXT cxt; struct win32apireq *pIn=lpvInBuffer; struct win32apireq *pOut=lpvOutBuffer; TRACE( "Control '%s': " "proid=0x%08lx, eax=0x%08lx, ebx=0x%08lx, ecx=0x%08lx, " "edx=0x%08lx, esi=0x%08lx, edi=0x%08lx, ebp=0x%08lx, " "error=0x%04x, pad=0x%04x\n", (dwIoControlCode==IFS_IOCTL_21)?"IFS_IOCTL_21":"IFS_IOCTL_2F", pIn->ar_proid, pIn->ar_eax, pIn->ar_ebx, pIn->ar_ecx, pIn->ar_edx, pIn->ar_esi, pIn->ar_edi, pIn->ar_ebp, pIn->ar_error, pIn->ar_pad ); win32apieq_2_CONTEXT(pIn,&cxt); if(dwIoControlCode==IFS_IOCTL_21) __wine_call_int_handler( &cxt, 0x21 ); else __wine_call_int_handler( &cxt, 0x2f ); CONTEXT_2_win32apieq(&cxt,pOut); return TRUE; } case IFS_IOCTL_GET_RES: FIXME( "Control 'IFS_IOCTL_GET_RES' not implemented\n"); return FALSE; case IFS_IOCTL_GET_NETPRO_NAME_A: FIXME( "Control 'IFS_IOCTL_GET_NETPRO_NAME_A' not implemented\n"); return FALSE; default: FIXME( "Control %d not implemented\n", dwIoControlCode); return FALSE; } }