亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mapmem.c

?? Windows下
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*++

Copyright (c) 1993  Microsoft Corporation

Module Name:

    mapmem.c

Abstract:

    A simple driver sample which shows how to map physical memory
    into a user-mode process's adrress space using the
    Zw*MapViewOfSection APIs.

Environment:

    kernel mode only

Notes:

    For the sake of simplicity this sample does not attempt to
    recognize resource conflicts with other drivers/devices. A
    real-world driver would call IoReportResource usage to
    determine whether or not the resource is available, and if
    so, register the resource under it's name.

Revision History:

--*/


#include <ntddk.h>
#include "mapmem.h"
#include <stdarg.h>

NTSTATUS
MapMemDispatch(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

VOID
MapMemUnload(
    IN PDRIVER_OBJECT DriverObject
    );

NTSTATUS
MapMemMapTheMemory(
    IN PDEVICE_OBJECT DeviceObject,
    IN OUT PVOID      ioBuffer,
    IN ULONG          inputBufferLength,
    IN ULONG          outputBufferLength
    );

#if DBG
#define MapMemKdPrint(arg) DbgPrint arg
#else
#define MapMemKdPrint(arg)
#endif

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT  DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
/*++

Routine Description:

    Installable driver initialization entry point.
    This entry point is called directly by the I/O system.

Arguments:

    DriverObject - pointer to the driver object

    RegistryPath - pointer to a unicode string representing the path
                   to driver-specific key in the registry

Return Value:

    STATUS_SUCCESS if successful,
    STATUS_UNSUCCESSFUL otherwise

--*/
{

    PDEVICE_OBJECT deviceObject = NULL;
    NTSTATUS       ntStatus;
    WCHAR          deviceNameBuffer[] = L"\\Device\\MapMem";
    UNICODE_STRING deviceNameUnicodeString;
    WCHAR          deviceLinkBuffer[] = L"\\DosDevices\\MAPMEM";
    UNICODE_STRING deviceLinkUnicodeString;



    MapMemKdPrint (("MAPMEM.SYS: entering DriverEntry\n"));

    //
    // Create an EXCLUSIVE device object (only 1 thread at a time
    // can make requests to this device)
    //

    RtlInitUnicodeString (&deviceNameUnicodeString,
                          deviceNameBuffer);

    ntStatus = IoCreateDevice (DriverObject,
                               0,
                               &deviceNameUnicodeString,
                               FILE_DEVICE_MAPMEM,
                               0,
                               TRUE,
                               &deviceObject
                               );

    if (NT_SUCCESS(ntStatus))
    {
        //
        // Create dispatch points for device control, create, close.
        //

        DriverObject->MajorFunction[IRP_MJ_CREATE]         =
        DriverObject->MajorFunction[IRP_MJ_CLOSE]          =
        DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = MapMemDispatch;
        DriverObject->DriverUnload                         = MapMemUnload;



        //
        // Create a symbolic link, e.g. a name that a Win32 app can specify
        // to open the device
        //

        RtlInitUnicodeString(&deviceLinkUnicodeString,
                             deviceLinkBuffer);

        ntStatus = IoCreateSymbolicLink (&deviceLinkUnicodeString,
                                         &deviceNameUnicodeString);

        if (!NT_SUCCESS(ntStatus))  {

            //
            // Symbolic link creation failed- note this & then delete the
            // device object (it's useless if a Win32 app can't get at it).
            //

            MapMemKdPrint (("MAPMEM.SYS: IoCreateSymbolicLink failed\n"));
            IoDeleteDevice (deviceObject);
        }
    } else {
        MapMemKdPrint (("MAPMEM.SYS: IoCreateDevice failed\n"));
    }

    return ntStatus;
}

NTSTATUS
MapMemDispatch(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
/*++

Routine Description:

    Process the IRPs sent to this device.

Arguments:

    DeviceObject - pointer to a device object

    Irp          - pointer to an I/O Request Packet

Return Value:
    NTSTATUS

--*/
{
    PIO_STACK_LOCATION irpStack;
    PVOID              ioBuffer;
    ULONG              inputBufferLength;
    ULONG              outputBufferLength;
    ULONG              ioControlCode;
    NTSTATUS           ntStatus;


    //
    // Init to default settings- we only expect 1 type of
    //     IOCTL to roll through here, all others an error.
    //

    Irp->IoStatus.Status      = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;


    //
    // Get a pointer to the current location in the Irp. This is where
    //     the function codes and parameters are located.
    //

    irpStack = IoGetCurrentIrpStackLocation(Irp);


    //
    // Get the pointer to the input/output buffer and it's length
    //

    ioBuffer           = Irp->AssociatedIrp.SystemBuffer;
    inputBufferLength  = irpStack->Parameters.DeviceIoControl.InputBufferLength;
    outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;


    switch (irpStack->MajorFunction)  {
    case IRP_MJ_CREATE:

        MapMemKdPrint (("MAPMEM.SYS: IRP_MJ_CREATE\n"));

        break;

    case IRP_MJ_CLOSE:

        MapMemKdPrint (("MAPMEM.SYS: IRP_MJ_CLOSE\n"));

        break;

    case IRP_MJ_DEVICE_CONTROL:

        ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;

        switch (ioControlCode)
        {
        case IOCTL_MAPMEM_MAP_USER_PHYSICAL_MEMORY:

            Irp->IoStatus.Status = MapMemMapTheMemory (DeviceObject,
                                                       ioBuffer,
                                                       inputBufferLength,
                                                       outputBufferLength
                                                       );

            if (NT_SUCCESS(Irp->IoStatus.Status))
            {
                //
                // Success! Set the following to sizeof(PVOID) to
                //     indicate we're passing valid data back.
                //

                Irp->IoStatus.Information = sizeof(PVOID);

                MapMemKdPrint (("MAPMEM.SYS: memory successfully mapped\n"));
            }

            else
            {
                Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;

                MapMemKdPrint (("MAPMEM.SYS: memory map failed :(\n"));
            }

            break;

        case IOCTL_MAPMEM_UNMAP_USER_PHYSICAL_MEMORY:

            if (inputBufferLength >= sizeof(PVOID))
            {
                Irp->IoStatus.Status = ZwUnmapViewOfSection ((HANDLE) -1,
                                                             *((PVOID *) ioBuffer)
                                                             );

                MapMemKdPrint (("MAPMEM.SYS: memory successfully unmapped\n"));
            }
            else
            {
                Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;

                MapMemKdPrint (("MAPMEM.SYS: ZwUnmapViewOfSection failed\n"));
            }

            break;

        default:

            MapMemKdPrint (("MAPMEM.SYS: unknown IRP_MJ_DEVICE_CONTROL\n"));

            Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;

            break;
        }

        break;
    }


    //
    // DON'T get cute and try to use the status field of
    // the irp in the return status.  That IRP IS GONE as

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日夜夜免费精品| 午夜精品免费在线| 日韩欧美中文一区二区| 波多野结衣亚洲| 国产真实乱子伦精品视频| 亚洲精品自拍动漫在线| 精品第一国产综合精品aⅴ| 在线免费亚洲电影| 福利视频网站一区二区三区| 日韩国产一二三区| 一区二区三区免费网站| 国产精品天干天干在线综合| 日韩免费电影网站| 欧美日韩国产综合视频在线观看| 99久久久久久| 国产成人av一区| 韩国中文字幕2020精品| 热久久免费视频| 日韩av不卡在线观看| 亚洲国产精品自拍| 亚洲尤物在线视频观看| 亚洲欧美日韩国产成人精品影院| 中文字幕成人av| 国产欧美日韩亚州综合| 国产婷婷色一区二区三区四区 | eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 2020国产精品自拍| 欧美成人a∨高清免费观看| 欧美一级片在线观看| 欧美日韩一区在线| 欧美三级午夜理伦三级中视频| av网站一区二区三区| 福利一区福利二区| 成人永久免费视频| av在线不卡免费看| 99久久久免费精品国产一区二区| 成人黄色大片在线观看| proumb性欧美在线观看| 91女厕偷拍女厕偷拍高清| 成人激情免费电影网址| www.成人在线| 色婷婷国产精品综合在线观看| 99国产精品国产精品毛片| av一区二区三区四区| 色综合久久六月婷婷中文字幕| 99久久精品一区二区| 91电影在线观看| 欧美精品v日韩精品v韩国精品v| 56国语精品自产拍在线观看| 日韩欧美在线影院| 久久免费看少妇高潮| 国产精品免费av| 亚洲激情五月婷婷| 日韩影视精彩在线| 国产真实乱偷精品视频免| 成人午夜伦理影院| 日本韩国一区二区三区| 这里只有精品免费| 久久亚洲二区三区| 成人欧美一区二区三区在线播放| 亚洲一区二区三区不卡国产欧美| 日韩av电影天堂| 国产成人鲁色资源国产91色综| 91视视频在线直接观看在线看网页在线看| 色婷婷av一区二区三区软件| 7777精品伊人久久久大香线蕉经典版下载| 日韩欧美国产小视频| 中文字幕欧美日韩一区| 夜夜嗨av一区二区三区网页 | 精品国产a毛片| 国产精品福利影院| 日韩福利电影在线| 懂色av一区二区三区蜜臀| 欧亚一区二区三区| 精品国一区二区三区| 中文字幕一区二区三| 午夜精彩视频在线观看不卡| 国产乱码一区二区三区| 91久久一区二区| 久久蜜臀中文字幕| 一区二区三区在线观看网站| 六月丁香婷婷色狠狠久久| av影院午夜一区| 欧美不卡一区二区三区| 亚洲乱码一区二区三区在线观看| 六月丁香综合在线视频| 在线观看日韩精品| 久久免费电影网| 日韩精彩视频在线观看| jlzzjlzz亚洲日本少妇| 欧美xxxxxxxx| 亚洲一区二区美女| 成人黄色电影在线| 欧美mv和日韩mv的网站| 亚洲高清久久久| 99久久99久久精品免费观看| 欧美不卡一区二区三区| 亚洲第一激情av| 色悠悠亚洲一区二区| 国产亚洲欧洲一区高清在线观看| 亚洲成a人v欧美综合天堂| 成人动漫在线一区| 欧美大尺度电影在线| 亚洲一区二区三区激情| caoporn国产一区二区| 久久久九九九九| 蜜臀国产一区二区三区在线播放 | 成人av免费在线观看| 精品久久久久久久久久久院品网 | 男人操女人的视频在线观看欧美| 91官网在线免费观看| 亚洲人精品午夜| 国产成人av一区| 亚洲人成小说网站色在线| 成人在线视频一区二区| 精品久久人人做人人爰| 久久99久久久欧美国产| 中文字幕在线免费不卡| 97aⅴ精品视频一二三区| 9i在线看片成人免费| 久久美女高清视频| 久草中文综合在线| 日韩欧美国产小视频| 蜜臀av一区二区在线观看| 欧美日韩的一区二区| 亚洲成年人网站在线观看| 欧美亚洲日本国产| 亚洲影院理伦片| 欧美在线观看一二区| 一级日本不卡的影视| 一本久道久久综合中文字幕 | 亚洲欧洲制服丝袜| 91麻豆免费在线观看| 综合婷婷亚洲小说| 99久久国产综合精品色伊| 亚洲欧洲国产日韩| 91毛片在线观看| 亚洲专区一二三| 欧美精品亚洲二区| 美女网站在线免费欧美精品| 欧美一级在线视频| 日韩国产在线观看一区| 欧美一区二区三区免费在线看| 免费精品视频在线| 久久婷婷一区二区三区| 美美哒免费高清在线观看视频一区二区 | 国产精品996| 日本一区二区三区在线观看| 粉嫩绯色av一区二区在线观看 | 一区二区三区四区在线| 欧美视频一区二区在线观看| 水蜜桃久久夜色精品一区的特点 | 99视频有精品| 亚洲成国产人片在线观看| 日韩情涩欧美日韩视频| 国产成人精品aa毛片| 一区二区在线电影| 欧美一区二区在线观看| 国产成人精品免费网站| 国产精品你懂的在线| 99久久综合精品| 视频一区二区三区中文字幕| 久久夜色精品一区| 91一区二区三区在线观看| 午夜精品福利一区二区三区蜜桃| 亚洲精品一区二区三区精华液| 成人午夜电影小说| 亚洲成人一区二区| 欧美成人精品二区三区99精品| 成人av集中营| 日韩一区欧美二区| 中文字幕av免费专区久久| 欧美自拍偷拍一区| 国产在线一区二区| 一区二区三区在线视频免费观看| 欧美一卡二卡三卡| 91亚洲资源网| 久草在线在线精品观看| 亚洲另类一区二区| 欧美电影免费观看高清完整版 | 亚洲电影一级黄| 久久精品一区八戒影视| 欧美日韩精品专区| 成人午夜免费av| 蜜臀av一区二区三区| 亚洲欧美日韩精品久久久久| 欧美不卡一区二区| 成人av手机在线观看| 久久成人免费日本黄色| 亚洲免费av在线| 中文在线一区二区| 欧美一区二区在线视频| 91国偷自产一区二区开放时间 | 成年人网站91| 精品亚洲免费视频| 性欧美疯狂xxxxbbbb| 国产精品家庭影院| eeuss影院一区二区三区| 亚洲美腿欧美偷拍| 国产成a人无v码亚洲福利|