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

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

?? ramdisk.c

?? 這個例程源碼演示了在WINDOWS 2000下
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*++

Copyright (c) 1990-2000 Microsoft Corporation, All Rights Reserved

Module Name:

    Ramdisk.c

Abstract:

    This is the Ramdisk sample driver.

Author:

    Robert Nelson (RobertN) 10-Mar-1993.

Environment:

    Kernel mode only.

Notes:
    If the device is not ready, queue the I/O IRPs instead of rejecting

Revision History:
    Added the IOCTL_DISK_GET_PARTITION_INFO query to make it work with NTFS
    driver loaded (thanks Robert Vierthaler (RobertVi)).


  Raju Ramanathan (Rajuram)

  Converted the sample driver to Windows 2000   02/22/2000
  Code cleaning                                 04/19/2000

--*/


#include "ramdisk.h"

#ifdef ALLOC_PRAGMA
#pragma alloc_text( INIT, DriverEntry )
#pragma alloc_text( PAGE, RamDiskCreateClose) 
#pragma alloc_text( PAGE, RamDiskUnload)
#pragma alloc_text( PAGE, RamDiskQueryDiskRegParameters )
#pragma alloc_text( PAGE, RamDiskFormatDisk )
#pragma alloc_text( PAGE, RamDiskAddDevice )
#pragma alloc_text( PAGE, RamDiskDispatchPnp )
#pragma alloc_text( PAGE, RamDiskDispatchPower )
#pragma alloc_text( PAGE, RamDiskDispatchSystemControl )
#pragma alloc_text( PAGE, RamDiskRemoveDevice )
#pragma alloc_text( PAGE, GetPnpIrpName )
#if DBG
#pragma alloc_text( PAGE, RamDiskQueryDebugRegParameters )
#endif
#endif // ALLOC_PRAGMA

#if DBG
ULONG  BreakOnEntry = FALSE;
ULONG  DbgLevel = DBG_LEVEL_ERROR;
ULONG  DbgComp  = DBG_COMP_ALL;
// To disable selected components 
//ULONG  DbgComp  = DBG_COMP_ALL & ~DBG_COMP_PNP;
#endif    // DBG


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.

--*/
{
    PRAMDISK_DRIVER_EXTENSION   driverExtension;
    NTSTATUS                    status;

#if DBG
    CHAR VersionHerald[]    = "Windows 2000 Ramdisk Driver - Version %s built on %s\n";
    CHAR VersionNumber[]    = "1.0";
    CHAR VersionTimestamp[] = __DATE__ " " __TIME__;

    DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_NOTIFY, ( VersionHerald, VersionNumber, VersionTimestamp) );
#endif

    DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_VERBOSE, ("DriverEntry - IN\n") );


    //
    // Create extension for the driverobject to store driver specific 
    // information. Device specific information should be stored in
    // Device Extension

    status = IoAllocateDriverObjectExtension(DriverObject,
                                             RAMDISK_DRIVER_EXTENSION_KEY,
                                             sizeof(RAMDISK_DRIVER_EXTENSION),
                                             &driverExtension);

    if(!NT_SUCCESS(status)) {
         DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_ERROR, 
            ("Ramdisk driver extension could not be allocated %lx \n", status ) );
        return status;
    }

    //
    // Copy the registry path into the driver extension so we can use it later
    //

    driverExtension->RegistryPath.Length = RegistryPath->Length;
    driverExtension->RegistryPath.MaximumLength = RegistryPath->MaximumLength + 
                                                    sizeof(UNICODE_NULL);

    driverExtension->RegistryPath.Buffer =
        ExAllocatePoolWithTag(PagedPool,
                              driverExtension->RegistryPath.MaximumLength,
                              RAMDISK_TAG_GENERAL);

    if(driverExtension->RegistryPath.Buffer == NULL) {
        status = STATUS_INSUFFICIENT_RESOURCES;
        return status;
    }

    RtlCopyUnicodeString( &(driverExtension->RegistryPath), RegistryPath);
	driverExtension->DeviceInitialized = FALSE;

#if DBG
    // Query registry paramters

    RamDiskQueryDebugRegParameters( RegistryPath );

    // Break if required
    if ( BreakOnEntry ) {
        KdBreakPoint();
    }
#endif

    //
    // Create dispatch points for Create, Close, Unload, Pnp, Power & WMI
    //

    DriverObject->MajorFunction[IRP_MJ_CREATE]         = RamDiskCreateClose;
    DriverObject->MajorFunction[IRP_MJ_CLOSE]          = RamDiskCreateClose;
    DriverObject->MajorFunction[IRP_MJ_READ]           = RamDiskReadWrite;
    DriverObject->MajorFunction[IRP_MJ_WRITE]          = RamDiskReadWrite;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = RamDiskIOCtl;
    DriverObject->MajorFunction[IRP_MJ_PNP]            = RamDiskDispatchPnp;
    DriverObject->MajorFunction[IRP_MJ_POWER]          = RamDiskDispatchPower;
    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = RamDiskDispatchSystemControl;
    DriverObject->DriverExtension->AddDevice           = RamDiskAddDevice;
    DriverObject->DriverUnload                         = RamDiskUnload;

    DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_VERBOSE, ("DriverEntry - OUT.\n") );
    return STATUS_SUCCESS;
}   // End of DriverEntry()


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

Routine Description:

    This routine is called by the I/O system to create or close a
    handle to the device that we control. 

Arguments:

    DeviceObject - a pointer to the object that represents the device
    Irp - a pointer to the I/O Request Packet for this request.

Return Value:

    STATUS_SUCCESS

--*/
{
    PIO_STACK_LOCATION  irpStack;
    NTSTATUS            status = STATUS_SUCCESS;

    PAGED_CODE();

    DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_VERBOSE, ("CreateClose - IN\n") );

    irpStack = IoGetCurrentIrpStackLocation( Irp );

    switch ( irpStack->MajorFunction ) {

        case IRP_MJ_CREATE:
            DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_INFO, ("IRP_MJ_CREATE (%p)\n", Irp) );
            COMPLETE_REQUEST( Irp, status, 0 );
            break;

        case IRP_MJ_CLOSE:
            DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_INFO, ("IRP_MJ_CLOSE (%p)\n", Irp) );
            COMPLETE_REQUEST( Irp, status, 0 );
            break;

        default:
            status = STATUS_NOT_IMPLEMENTED;
            COMPLETE_REQUEST( Irp, status, 0 );
            ASSERTMSG("BUG: we should never get here", 0);
            break;

    } // switch

    DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_VERBOSE, ("CreateClose - OUT\n") );
    return status;
}   // End of RamDiskCreateClose()

VOID
RamDiskUnload(
    IN PDRIVER_OBJECT DriverObject
    )
/*++

Routine Description:

    This routine is called when the driver is unloaded from the
    system. This released the memory allocated during DriverEntry

Arguments:

    DriverObject - a pointer to the driver object 

Return Value:

    None

--*/
{
    PRAMDISK_DRIVER_EXTENSION   driverExtension;

    DBGPRINT( DBG_COMP_INIT, DBG_LEVEL_INFO, ("Driver Unload\n") );
    ASSERT(DriverObject->DeviceObject == NULL);
    driverExtension = IoGetDriverObjectExtension(DriverObject,
                                             RAMDISK_DRIVER_EXTENSION_KEY);
    ASSERT ( driverExtension != NULL );
    if ( driverExtension->RegistryPath.Buffer ) {
        ExFreePool( driverExtension->RegistryPath.Buffer );
    }
    return;
}   // End of RamDiskUnload()


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

Routine Description:

    This is the IOCTL handler for our driver. This is called whenever
    the driver on top sends any IOCTL requests

Arguments:

    DeviceObject - a pointer to the object that represents the device
    Irp - a pointer to the I/O Request Packet for this request.

Return Value:

    Status based on the request

--*/
{

    PIO_STACK_LOCATION  irpStack;
    NTSTATUS            status = STATUS_INVALID_DEVICE_REQUEST;
    ULONG               command;
    ULONG               information = 0;

    PDEVICE_EXTENSION    devExt = DeviceObject->DeviceExtension;

    DBGPRINT( DBG_COMP_IOCTL, DBG_LEVEL_VERBOSE, ("IOCtl- IN \n" ) );

    status = IoAcquireRemoveLock(&devExt->RemoveLock, Irp);
    if (!NT_SUCCESS(status)) {
        DBGPRINT( DBG_COMP_IOCTL, DBG_LEVEL_ERROR, ("Acquire RemoveLock failed\n" ) );
        COMPLETE_REQUEST( Irp, status, 0 );
        return status;
    }

    irpStack = IoGetCurrentIrpStackLocation(Irp);
    command = irpStack->Parameters.DeviceIoControl.IoControlCode;

    switch ( command )
    {

    case IOCTL_DISK_GET_PARTITION_INFO: {

        DBGPRINT( DBG_COMP_IOCTL, DBG_LEVEL_INFO, ("IOCTL_DISK_GET_PARTITION_INFO \n" ) );
        if (irpStack->Parameters.DeviceIoControl.OutputBufferLength <
            sizeof(PARTITION_INFORMATION)) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人高清在线| 7799精品视频| 国产一区二区三区免费在线观看| 一区二区三区丝袜| 亚洲精品欧美二区三区中文字幕| 中文字幕免费观看一区| 国产精品伦一区二区三级视频| 寂寞少妇一区二区三区| 国产一区欧美日韩| 在线免费观看日韩欧美| 国产亚洲欧美在线| 国产一区二区三区黄视频| 国产亚洲精久久久久久| 91精品国产综合久久久久久久久久| 制服丝袜成人动漫| 精品国产露脸精彩对白| 视频一区国产视频| 欧美日韩国产成人在线免费| 亚洲人成亚洲人成在线观看图片| 国产超碰在线一区| 久久午夜电影网| 国产馆精品极品| 国产精品久久久久一区| 一本色道久久综合亚洲aⅴ蜜桃 | 首页国产欧美日韩丝袜| 欧美视频一区二区三区四区| 亚洲五月六月丁香激情| 91超碰这里只有精品国产| 蜜桃av噜噜一区| 欧美精品一区二区三| 不卡高清视频专区| 亚洲激情校园春色| 欧美成人女星排行榜| 国产高清不卡二三区| 欧美国产激情二区三区| 91亚洲午夜精品久久久久久| 水野朝阳av一区二区三区| 欧美变态口味重另类| 亚洲成人精品在线观看| 不卡一区二区在线| 91精品国产全国免费观看| 欧美日韩1234| 国产麻豆精品theporn| 国产丝袜欧美中文另类| 国产精品国产三级国产| 欧美日本韩国一区| 成人午夜电影久久影院| 欧美男同性恋视频网站| 国产成人综合亚洲网站| 久久久久久久久久久99999| 欧美在线一区二区三区| 久久99精品久久久久久久久久久久 | k8久久久一区二区三区| 免费xxxx性欧美18vr| 亚洲激情第一区| 国产欧美精品区一区二区三区 | 91麻豆123| 国产精品亚洲一区二区三区妖精| 五月开心婷婷久久| 亚洲欧洲日韩女同| 国产亚洲一区字幕| 欧美一卡二卡在线| 91麻豆精品91久久久久同性| 在线视频欧美精品| 免费观看在线色综合| 欧美精品一区二区三| 日本欧美在线看| 亚洲精品国产无天堂网2021| 国产精品丝袜久久久久久app| 欧美一区二区三区四区在线观看| 欧美在线观看视频在线| 波多野结衣精品在线| 国产成人免费在线视频| 精品亚洲成a人| 蜜桃视频在线观看一区| 蜜臀av一区二区| 首页综合国产亚洲丝袜| 日韩av一级电影| 香蕉影视欧美成人| 天堂蜜桃一区二区三区| 性做久久久久久久免费看| 午夜久久久影院| 亚洲资源在线观看| 亚洲福中文字幕伊人影院| 亚洲一区在线播放| 午夜亚洲福利老司机| 亚洲va欧美va人人爽| 亚洲高清免费视频| 蜜臀精品久久久久久蜜臀| 蓝色福利精品导航| 韩国女主播一区| 顶级嫩模精品视频在线看| 成人动漫一区二区| 色综合久久久久久久久| 欧美性xxxxx极品少妇| 欧美影院午夜播放| 欧美日韩精品一区二区天天拍小说| 欧美日韩一级二级三级| 日韩欧美专区在线| 久久久99精品久久| 亚洲人快播电影网| 性做久久久久久免费观看| 久久99国内精品| 不卡的av网站| 精品1区2区3区| 日韩一本二本av| 国产欧美中文在线| 一区二区三区日韩欧美精品| 五月天激情小说综合| 国产精品77777| 色综合激情五月| 欧美精品1区2区3区| 国产欧美一区二区三区沐欲| 日韩美女视频一区二区 | 国产一区二区视频在线播放| 成人国产视频在线观看| 欧美体内she精高潮| 日韩一区二区精品在线观看| 中文字幕精品一区二区精品绿巨人| 亚洲另类在线视频| 蜜乳av一区二区| 91亚洲精品乱码久久久久久蜜桃| 欧美人狂配大交3d怪物一区| 国产婷婷精品av在线| 性久久久久久久| 不卡一区二区中文字幕| 91精品国产aⅴ一区二区| 国产精品欧美久久久久一区二区| 亚洲国产精品久久人人爱 | 免费成人在线视频观看| 国产电影一区二区三区| 欧美日韩国产电影| 中文字幕一区二区三区四区不卡| 国产精品日日摸夜夜摸av| 亚洲人成小说网站色在线| 天堂一区二区在线| 9l国产精品久久久久麻豆| 欧美一区二区在线免费播放| 亚洲色图在线看| 激情综合一区二区三区| 欧美日韩不卡一区| 亚洲欧洲精品一区二区三区不卡| 经典三级在线一区| 日韩欧美亚洲一区二区| 日韩一区在线播放| 国产一区二区视频在线| 欧美精品1区2区| 亚洲老司机在线| 粉嫩13p一区二区三区| 日韩欧美亚洲国产另类| 亚洲国产欧美在线人成| 成人av电影在线观看| 久久综合色一综合色88| 日日夜夜免费精品| 色婷婷久久99综合精品jk白丝| 国产午夜精品理论片a级大结局| 日韩va亚洲va欧美va久久| 欧美午夜精品一区二区蜜桃 | 欧美日韩一级视频| 一卡二卡三卡日韩欧美| 久久久久久久久久久黄色 | 久久综合九色综合97婷婷| 国产精品国产三级国产| 成人午夜电影久久影院| 国产亚洲精品中文字幕| 国产精品456| 欧美大片在线观看一区| 日本女人一区二区三区| 欧美精品一二三| 天天av天天翘天天综合网| 欧美日韩国产经典色站一区二区三区| 亚洲欧美一区二区不卡| 91视频国产资源| 亚洲精品精品亚洲| 在线一区二区三区四区| 一区二区三区美女| 91极品美女在线| 性欧美疯狂xxxxbbbb| 91精品国产高清一区二区三区 | 欧美色大人视频| 亚洲成人你懂的| 欧美日韩1区2区| 精品一区二区在线播放| 久久午夜免费电影| 99在线精品免费| 亚洲一区二区精品3399| 欧美日韩精品专区| 色狠狠色噜噜噜综合网| 欧美婷婷六月丁香综合色| 91麻豆精品91久久久久久清纯| 国产午夜亚洲精品羞羞网站| 成人精品高清在线| 亚洲日韩欧美一区二区在线| 欧美最猛性xxxxx直播| 日韩综合小视频| 精品精品欲导航| 成人中文字幕电影| 亚洲一区免费观看| 日韩欧美一卡二卡| 成人午夜电影小说|