亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
中文字幕乱码亚洲精品一区| 日本视频一区二区三区| 日本精品一区二区三区高清| 亚洲国产视频一区| 欧美一二三四区在线| 久久69国产一区二区蜜臀| 欧美精品一区二区三区很污很色的 | 久久久久久久久久久久电影| 国产激情视频一区二区三区欧美 | av亚洲精华国产精华精| 亚洲午夜三级在线| 欧美一区二区播放| 国产**成人网毛片九色| 亚洲精品国产无天堂网2021| 欧美日韩国产高清一区二区三区| 久久av资源网| 国产精品第13页| 欧美探花视频资源| 久久99国产精品久久99果冻传媒| 亚洲国产成人午夜在线一区| 欧美最新大片在线看| 看国产成人h片视频| 国产精品欧美极品| 欧美日韩国产123区| 国产一区三区三区| 尤物视频一区二区| 精品免费国产二区三区| 99久久精品免费看国产 | 成人在线视频一区二区| 亚洲影院久久精品| 欧美精品一区二区久久久| 91免费版pro下载短视频| 日本成人超碰在线观看| 国产精品免费网站在线观看| 欧美日韩精品欧美日韩精品一 | 欧美曰成人黄网| 久久国产生活片100| 亚洲猫色日本管| 精品99999| 欧美色欧美亚洲另类二区| 国产一区二区调教| 亚洲影院免费观看| 国产人成亚洲第一网站在线播放| 欧美日韩国产一二三| 国产精品123| 日韩av电影免费观看高清完整版 | 国产成人综合网| 日韩主播视频在线| 亚洲欧洲日韩综合一区二区| 日韩精品专区在线影院重磅| 91美女片黄在线观看| 国产麻豆视频一区| 午夜精品久久久| 亚洲丝袜自拍清纯另类| 欧美mv和日韩mv的网站| 欧美视频中文字幕| 成人综合在线网站| 韩国女主播一区| 亚洲成人自拍偷拍| 亚洲色图视频网| 国产亚洲成aⅴ人片在线观看| 制服丝袜亚洲色图| 91福利在线看| 99在线精品观看| 国产在线精品一区二区夜色| 五月综合激情日本mⅴ| 亚洲欧美另类小说视频| 亚洲国产精品成人综合色在线婷婷 | 精品少妇一区二区三区| 精品污污网站免费看| 91女厕偷拍女厕偷拍高清| 国产盗摄女厕一区二区三区 | 97成人超碰视| 国产精品白丝jk黑袜喷水| 蜜臀av性久久久久av蜜臀妖精| 亚洲黄一区二区三区| 中文在线免费一区三区高中清不卡| 欧美本精品男人aⅴ天堂| 欧美日本视频在线| 91黄视频在线| 色偷偷久久人人79超碰人人澡| 成年人国产精品| 国产一区二区调教| 久久se这里有精品| 免费久久精品视频| 青青草91视频| 日韩精品电影一区亚洲| 亚洲国产乱码最新视频 | 欧美视频完全免费看| 99久久er热在这里只有精品15| 国产精品一二三区在线| 精品一区二区三区欧美| 蜜桃av一区二区三区| 视频一区国产视频| 午夜欧美2019年伦理| 亚洲一区二区三区四区在线免费观看| 亚洲天堂福利av| 亚洲日本一区二区| 亚洲免费在线视频一区 二区| 亚洲三级视频在线观看| 亚洲欧洲无码一区二区三区| 中文字幕一区二区三区视频| 日本一区二区三区久久久久久久久不 | 亚洲午夜一二三区视频| 一区二区三区毛片| 亚洲综合无码一区二区| 亚洲无人区一区| 亚洲v日本v欧美v久久精品| 亚州成人在线电影| 爽爽淫人综合网网站| 秋霞午夜鲁丝一区二区老狼| 毛片av一区二区三区| 精品影视av免费| 国产剧情一区在线| 成人福利视频在线看| 91视频免费播放| 欧美伊人久久大香线蕉综合69| 欧美区一区二区三区| 91精品免费在线观看| 日韩欧美视频在线| 久久毛片高清国产| 国产精品久久久久久久久免费樱桃| 一区二区中文字幕在线| 悠悠色在线精品| 首页欧美精品中文字幕| 韩国精品在线观看| 懂色av一区二区三区免费观看| av一区二区三区四区| 欧美日韩一区二区欧美激情| 欧美一级在线观看| 久久精品视频免费观看| 中文字幕亚洲在| 亚洲成人第一页| 国产一区中文字幕| 97精品久久久午夜一区二区三区| 欧美三区在线观看| 日韩欧美专区在线| 日本一区二区三区高清不卡| 一区二区三区在线视频观看| 日本不卡一二三区黄网| 国产盗摄视频一区二区三区| 色综合一区二区三区| 9191成人精品久久| 久久久噜噜噜久久中文字幕色伊伊 | 国产女人18毛片水真多成人如厕 | 欧美日韩一区小说| 欧美不卡一区二区三区四区| 国产精品美女www爽爽爽| 亚洲综合成人网| 激情欧美日韩一区二区| www.色综合.com| 欧美日韩高清一区二区| 国产亚洲欧美一区在线观看| 一级日本不卡的影视| 蜜桃精品视频在线观看| 99视频精品在线| 91精品国产入口| 国产精品久久久久久久岛一牛影视| 亚洲国产中文字幕在线视频综合| 麻豆91在线播放免费| 91在线国内视频| 日韩欧美不卡一区| 亚洲视频电影在线| 精一区二区三区| 色悠久久久久综合欧美99| 精品久久国产字幕高潮| 亚洲激情男女视频| 国产一区二区三区电影在线观看| 在线观看视频91| 国产夜色精品一区二区av| 亚洲一区二区精品3399| 国产九色精品成人porny | 久久久99精品免费观看| 亚洲成人免费影院| 丁香激情综合国产| 日韩欧美一级二级| 又紧又大又爽精品一区二区| 国产精品中文有码| 欧美精品久久久久久久多人混战 | 一区二区成人在线| 国产不卡在线视频| 欧美一区二区视频在线观看| 自拍偷在线精品自拍偷无码专区| 久久国产精品无码网站| 在线一区二区三区四区五区 | 日本亚洲最大的色成网站www| 成人av资源在线观看| 日韩欧美国产一区二区三区| 亚洲制服丝袜av| 9i看片成人免费高清| 久久精品在这里| 奇米影视一区二区三区小说| 一本大道久久a久久综合婷婷| 久久一留热品黄| 免费久久99精品国产| 色婷婷亚洲一区二区三区| 国产欧美一区二区三区沐欲| 另类小说色综合网站| 欧美日韩激情在线| 亚洲欧美成人一区二区三区|