Ignore:
Timestamp:
Feb 16, 2000, 12:39:20 AM (26 years ago)
Author:
bird
Message:

IOCtl exported services.
k32AllocMemEx.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/win32k/dev16/d16strat.c

    r1678 r2799  
    1 /* $Id: d16strat.c,v 1.3 1999-11-10 01:45:30 bird Exp $
     1/* $Id: d16strat.c,v 1.4 2000-02-15 23:39:18 bird Exp $
    22 *
    33 * d16strat.c - 16-bit strategy routine, device headers, device_helper (ptr)
     
    3030#include "dev1632.h"
    3131#include "dev16.h"
     32#include "win32k.h"
    3233
    3334
     
    8889USHORT NEAR strategy(PRPH pRpH, unsigned short usDev)
    8990{
    90 
    9191    switch (pRpH->Cmd)
    9292    {
     
    145145            {
    146146                ULONG ulLin;
    147                 if (DevHelp_VirtToLin(SELECTOROF(pRp->DataPacket), OFFSETOF(pRp->DataPacket), &ulLin) != NO_ERROR)
     147                if (DevHelp_VirtToLin(SELECTOROF(pRp->DataPacket), OFFSETOF(pRp->DataPacket),
     148                                      &ulLin) != NO_ERROR)
    148149                    return STATUS_DONE | STERR | ERROR_I24_INVALID_PARAMETER;
    149150                return CallGetOTEs32(ulLin);
     
    156157        }
    157158    }
     159    else if (pRp->Category == IOCTL_W32K_K32 || pRp->Category == IOCTL_W32K_ELF)
     160    {
     161        RP32GENIOCTL rp32Init = {0};
     162        rp32Init.rph.Len = pRp->rph.Len;
     163        rp32Init.rph.Unit = pRp->rph.Unit;
     164        rp32Init.rph.Cmd = pRp->rph.Cmd;
     165        rp32Init.rph.Status = pRp->rph.Status;
     166        rp32Init.rph.Flags = pRp->rph.Flags;
     167        rp32Init.rph.Link = (ULONG)pRp->rph.Link;
     168        rp32Init.Category = pRp->Category;
     169        rp32Init.Function = pRp->Function;
     170        rp32Init.sfn = pRp->sfn;
     171        rp32Init.DataLen = pRp->DataLen;
     172        rp32Init.ParmLen = pRp->ParmLen;
     173
     174        if (DevHelp_VirtToLin(SELECTOROF(pRp->DataPacket), OFFSETOF(pRp->DataPacket),
     175                              (PLIN)&rp32Init.DataPacket) != NO_ERROR)
     176            return STATUS_DONE | STERR | ERROR_I24_INVALID_PARAMETER;
     177        if (DevHelp_VirtToLin(SELECTOROF(pRp->ParmPacket), OFFSETOF(pRp->ParmPacket),
     178                              (PLIN)&rp32Init.ParmPacket) != NO_ERROR)
     179            return STATUS_DONE | STERR | ERROR_I24_INVALID_PARAMETER;
     180
     181        if (pRp->Category == IOCTL_W32K_ELF)
     182            rc = CallElfIOCtl(SSToDS_16a(&rp32Init));
     183        else
     184            rc = CallWin32kIOCtl(SSToDS_16a(&rp32Init));
     185
     186        return rc;
     187    }
     188
    158189
    159190    return STATUS_DONE | STERR | ERROR_I24_INVALID_PARAMETER;
     
    169200USHORT dev1GenIOCtl(PRP_GENIOCTL pRp)
    170201{
    171     pRp = pRp;
     202    if (pRp->Category == IOCTL_W32K_K32 || pRp->Category == IOCTL_W32K_ELF)
     203    {
     204        USHORT          rc;
     205        RP32GENIOCTL    rp32Init = {0};
     206        rp32Init.rph.Len = pRp->rph.Len;
     207        rp32Init.rph.Unit = pRp->rph.Unit;
     208        rp32Init.rph.Cmd = pRp->rph.Cmd;
     209        rp32Init.rph.Status = pRp->rph.Status;
     210        rp32Init.rph.Flags = pRp->rph.Flags;
     211        rp32Init.rph.Link = (ULONG)pRp->rph.Link;
     212        rp32Init.Category = pRp->Category;
     213        rp32Init.Function = pRp->Function;
     214        rp32Init.sfn = pRp->sfn;
     215        rp32Init.DataLen = pRp->DataLen;
     216        rp32Init.ParmLen = pRp->ParmLen;
     217
     218        if (DevHelp_VirtToLin(SELECTOROF(pRp->DataPacket), OFFSETOF(pRp->DataPacket),
     219                              (PLIN)&rp32Init.DataPacket) != NO_ERROR)
     220            return STATUS_DONE | STERR | ERROR_I24_INVALID_PARAMETER;
     221        if (DevHelp_VirtToLin(SELECTOROF(pRp->ParmPacket), OFFSETOF(pRp->ParmPacket),
     222                              (PLIN)&rp32Init.ParmPacket) != NO_ERROR)
     223            return STATUS_DONE | STERR | ERROR_I24_INVALID_PARAMETER;
     224
     225        if (pRp->Category == IOCTL_W32K_ELF)
     226            rc = CallElfIOCtl(SSToDS_16a(&rp32Init));
     227        else
     228            rc = CallWin32kIOCtl(SSToDS_16a(&rp32Init));
     229
     230        return rc;
     231    }
     232
    172233    return STATUS_DONE | STERR | ERROR_I24_INVALID_PARAMETER;
    173234}
Note: See TracChangeset for help on using the changeset viewer.