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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? filespy.c

?? 文件過濾驅(qū)動
?? C
?? 第 1 頁 / 共 5 頁
字號:
DBGSTATIC
BOOLEAN
SpyFastIoUnlockAllByKey(
    IN  PFILE_OBJECT     FileObject,
    IN  PVOID            ProcessId,
    IN  ULONG            Key,
    OUT PIO_STATUS_BLOCK IoStatus,
    IN  PDEVICE_OBJECT   DeviceObject
)
/*++

Routine Description:

    This routine is the fast I/O "pass through" routine for unlocking all
    locks within a file based on a specified key.

    This function simply invokes the next driver's cooresponding routine, or
    returns FALSE if the next driver does not implement the function.

Arguments:

    FileObject - Pointer to the file object to be unlocked.

    ProcessId - ID of the process requesting the unlock operation.

    Key - Lock key associated with the locks on the file to be released.

    IoStatus - Pointer to a variable to receive the I/O status of the
        operation.

    DeviceObject - Pointer to this driver's device object, the device on
        which the operation is to occur.

Return Value:

    The function value is TRUE or FALSE based on whether or not fast I/O
    is possible for this file.

--*/
{
    PDEVICE_OBJECT    deviceObject;
    PFAST_IO_DISPATCH fastIoDispatch;
    PRECORD_LIST      recordList;
    BOOLEAN           returnValue;
    BOOLEAN           shouldLog;

    PAGED_CODE();
    
    if (DeviceObject->DeviceExtension == NULL) {
        return FALSE;
    }
    
    if (shouldLog = SHOULD_LOG(DeviceObject)) {
        //
        // Log the necessary information for the start of the Fast I/O 
        // operation
        //
        recordList = SpyLogFastIoStart(
            UNLOCK_ALL_BY_KEY,
            0,
            FileObject,
            NULL,
            0,
            0 );
    }


    //
    // Pass through logic for this type of Fast I/O
    //
    deviceObject = 
        ((PDEVICE_EXTENSION) (DeviceObject->DeviceExtension))->
            NextDriverDeviceObject;
    if (!deviceObject) {
        returnValue = FALSE;
        goto SpyFastIoUnlockAllByKey_Exit;
    }
    fastIoDispatch = deviceObject->DriverObject->FastIoDispatch;

    if (VALID_FAST_IO_DISPATCH_HANDLER( fastIoDispatch, FastIoUnlockAllByKey )) {
        returnValue = (fastIoDispatch->FastIoUnlockAllByKey)( FileObject,
                                                              ProcessId,
                                                              Key,
                                                              IoStatus,
                                                              deviceObject);
    } else {
        returnValue = FALSE;
    }

SpyFastIoUnlockAllByKey_Exit:
    if (shouldLog) {
        //
        // Log the necessary information for the end of the Fast I/O operation
        // if we were able to allocate a RecordList to store this information
        //
        if (recordList) {
            SpyLogFastIoComplete(
                0, 
                FileObject, 
                IoStatus, 
                recordList);
        }
    }
    return returnValue;
}

DBGSTATIC
BOOLEAN
SpyFastIoDeviceControl(
    IN  PFILE_OBJECT     FileObject,
    IN  BOOLEAN          Wait,
    IN  PVOID            InputBuffer OPTIONAL,
    IN  ULONG            InputBufferLength,
    OUT PVOID            OutputBuffer OPTIONAL,
    IN  ULONG            OutputBufferLength,
    IN  ULONG            IoControlCode,
    OUT PIO_STATUS_BLOCK IoStatus,
    IN  PDEVICE_OBJECT   DeviceObject
)
/*++

Routine Description:

    This routine is the fast I/O "pass through" routine for device I/O 
    control operations on a file.
    
    If this I/O is directed to gControlDevice, then the parameters specify
    control commands to FileSpy.  These commands are interpreted and handled
    appropriately.

    If this is I/O directed at another DriverObject, this function simply 
    invokes the next driver's corresponding routine, or returns FALSE if 
    the next driver does not implement the function.

Arguments:

    FileObject - Pointer to the file object representing the device to be
        serviced.

    Wait - Indicates whether or not the caller is willing to wait if the
        appropriate locks, etc. cannot be acquired

    InputBuffer - Optional pointer to a buffer to be passed into the driver.

    InputBufferLength - Length of the optional InputBuffer, if one was
        specified.

    OutputBuffer - Optional pointer to a buffer to receive data from the
        driver.

    OutputBufferLength - Length of the optional OutputBuffer, if one was
        specified.

    IoControlCode - I/O control code indicating the operation to be performed
        on the device.

    IoStatus - Pointer to a variable to receive the I/O status of the
        operation.

    DeviceObject - Pointer to this driver's device object, the device on
        which the operation is to occur.

Return Value:

    The function value is TRUE or FALSE based on whether or not fast I/O
    is possible for this file.

Notes:

    This function does not check the validity of the input/output buffers because
    the ioctl's are implemented as METHOD_BUFFERED.  In this case, the I/O manager
    does the buffer validation checks for us.

--*/
{
    PDEVICE_OBJECT    deviceObject;
    PFAST_IO_DISPATCH fastIoDispatch;
    PRECORD_LIST      recordList;
    BOOLEAN           returnValue;
    BOOLEAN           shouldLog;
    PWSTR             deviceName = NULL;
    FILESPYVER        fileSpyVer;

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

    if (DeviceObject == gControlDeviceObject) {

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

        try {
            switch (IoControlCode) {
                case FILESPY_Reset:
                    IoStatus->Status = STATUS_INVALID_PARAMETER;
                    break;
    
                //
                //      Attach to a specified device
                //                                      
                case FILESPY_Attach:
                    if (InputBuffer == NULL || InputBufferLength <= 0)
                    {
                        IoStatus->Status = STATUS_INVALID_PARAMETER;
                        break;
                    }
                    
                    //
                    // Copy the device name and add a null to ensure that it is null terminated
                    //
                    deviceName =  ExAllocatePool( NonPagedPool, InputBufferLength + sizeof(WCHAR) );

                    if (NULL == deviceName) {
                        IoStatus->Status = STATUS_INSUFFICIENT_RESOURCES;
                        break;
                    }
                    
                    RtlCopyMemory( deviceName, InputBuffer, InputBufferLength );
                    deviceName[InputBufferLength / sizeof(WCHAR) - 1] = UNICODE_NULL;

                    IoStatus->Status = SpyAttachDevice(DeviceObject,deviceName);
                    break;  
    
                //
                //      Detach from a specified device
                //                                      
                case FILESPY_Detach:
                    if (InputBuffer == NULL || InputBufferLength <= 0)
                    {
                        IoStatus->Status = STATUS_INVALID_PARAMETER;
                        break;
                    }
                    
                    //
                    // Copy the device name and add a null to ensure that it is null terminated
                    //
                    deviceName =  ExAllocatePool( NonPagedPool, InputBufferLength + sizeof(WCHAR) );

                    if (NULL == deviceName) {
                        IoStatus->Status = STATUS_INSUFFICIENT_RESOURCES;
                        break;
                    }
                    
                    RtlCopyMemory( deviceName, InputBuffer, InputBufferLength );
                    deviceName[InputBufferLength / sizeof(WCHAR) - 1] = UNICODE_NULL;

                    IoStatus->Status = SpyDetachDevice(deviceName);
                    break;  
    
                //
                //      List all the devices that we are currently
                //      monitoring
                //                                      
                case FILESPY_ListDevices:
                    if (OutputBuffer == NULL || OutputBufferLength <= 0)
                    {
                        IoStatus->Status = STATUS_INVALID_PARAMETER;
                        break;
                    }
                    IoStatus->Status = SpyGetAttachList(
                        OutputBuffer,
                        OutputBufferLength,
                        &IoStatus->Information);
                    break;
    
                //
                //      Return entries from the log buffer
                //                                      
                case FILESPY_GetLog:
                    if (OutputBuffer == NULL || OutputBufferLength == 0) {
                        IoStatus->Status = STATUS_INVALID_PARAMETER;
                        break;
                    }
    
                    SpyGetLog(OutputBuffer, OutputBufferLength, IoStatus);
                    break;
    
                //
                //      Return version of the FileSpy filter driver
                //                                      
                case FILESPY_GetVer:
                    if ((OutputBufferLength < sizeof(FILESPYVER)) || 
                        (OutputBuffer == NULL)) {
                        IoStatus->Status = STATUS_INVALID_PARAMETER;
                        break;                    
                    }
                    
                    fileSpyVer.Major = FILESPY_MAJ_VERSION;
                    fileSpyVer.Minor = FILESPY_MIN_VERSION;
                    
                    RtlCopyMemory(OutputBuffer, &fileSpyVer, sizeof(FILESPYVER));
                    
                    IoStatus->Information = sizeof (FILESPYVER);
                    break;
                
                //
                //      Return hash table statistics
                //                                      
                case FILESPY_GetStats:
                    if ((OutputBufferLength < sizeof(HASH_STATISTICS)) || 
                        (OutputBuffer == NULL)) {
                        IoStatus->Status = STATUS_INVALID_PARAMETER;
                        break;                    
                    }
                    RtlCopyMemory( OutputBuffer, &gHashStat, sizeof (HASH_STATISTICS) );
                    IoStatus->Information = sizeof (HASH_STATISTICS);
                    break;
                    
                default:
                    IoStatus->Status = STATUS_INVALID_PARAMETER;
                    break;
            }
        } except(EXCEPTION_EXECUTE_HANDLER) {

            //
            // An exception was incurred while attempting to access
            // one of the caller's parameters.  Simply return an appropriate
            // error status code.
            //

            IoStatus->Status = GetExceptionCode();

        }

        returnValue = TRUE;
        goto SpyFastIoDeviceControl_Exit;
    }
    else
    {
        if (shouldLog = SHOULD_LOG(DeviceObject)) {
            //
            //
            // Log the necessary information for the start of the Fast I/O 
            // operation
            //
            recordList = SpyLogFastIoStart(
                DEVICE_CONTROL,
                0,
                FileObject,
                NULL,
                0,
                Wait );
        }

        deviceObject = 
            ((PDEVICE_EXTENSION) (DeviceObject->DeviceExtension))->
                NextDriverDeviceObject;
        if (!deviceObject) {
            returnValue = FALSE;
            goto SpyFastIoDeviceControl_LogExit;
        }
        fastIoDispatch = deviceObject->DriverObject->FastIoDispatch;

        if (VALID_FAST_IO_DISPATCH_HANDLER( fastIoDispatch, FastIoDeviceControl )) {
            returnValue = (fastIoDispatch->FastIoDeviceControl)( FileObject,
                                                                 Wait,
                                                                 InputBuffer,
                                                                 InputBufferLength,
                                                                 OutputBuffer,
                                                                 OutputBufferLength,
                                                                 IoControlCode,
                                                                 IoStatus,
                                                                 deviceObject);
        } else {
            returnValue = FALSE;
            IoStatus->Status = STATUS_SUCCESS;
        }
SpyFastIoDeviceControl_LogExit:
        if (shouldLog) {
            //
            // Log the necessary information for the end of the Fast I/O 
            // operation if we were able to allocate a RecordList to store 
            // this information
            //
            if (recordList) {
                SpyLogFastIoComplete(
                    0, 
                    FileObject, 
                    IoStatus, 
                    recordList);
            }
        }
    }

SpyFastIoDeviceControl_Exit:
    if (NULL != deviceName) {
        ExFreePool( deviceName );
    }
    return returnValue;
}


DBGSTATIC
VOID
SpyFastIoDetachDevice(
    IN PDEVICE_OBJECT SourceDevice,
    IN PDEVICE_OBJECT TargetDevice
)
/*++

Routine Description:

    This routine is invoked on the fast path to detach from a device that
    is being deleted.  This occu

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色诱亚洲精品久久久久久| 香蕉久久一区二区不卡无毒影院 | 欧美少妇性性性| 亚洲一区二区三区自拍| 欧美日韩国产精选| 久久久精品天堂| a级高清视频欧美日韩| 国产精品福利一区二区| 在线观看日韩精品| 美国精品在线观看| 日本一区免费视频| 欧美体内she精高潮| 亚洲国产日韩一区二区| 精品国产一区二区三区不卡| 国产成人夜色高潮福利影视| 综合久久久久久| 欧美精品乱码久久久久久按摩| 精品写真视频在线观看| 亚洲日本在线视频观看| 欧美一级久久久| 本田岬高潮一区二区三区| 五月婷婷激情综合| 国产日韩影视精品| 欧美不卡一区二区三区| 不卡视频一二三| 青青草97国产精品免费观看| 欧美国产成人在线| 91精品国产综合久久精品图片| 国产一区二区日韩精品| 亚洲一卡二卡三卡四卡五卡| 精品久久久久香蕉网| 91社区在线播放| 久久国产麻豆精品| 亚洲一区二区免费视频| 亚洲精品一区二区在线观看| 在线国产亚洲欧美| 国产精品一区二区三区网站| 亚洲国产va精品久久久不卡综合| 国产欧美日韩精品a在线观看| 欧美日韩久久久| 99精品久久99久久久久| 国内精品久久久久影院色| 亚洲一二三区视频在线观看| 国产无遮挡一区二区三区毛片日本| 欧美色图免费看| 99精品热视频| 国产乱色国产精品免费视频| 天堂久久久久va久久久久| 日韩久久一区二区| 中文字幕电影一区| 久久嫩草精品久久久精品| 777午夜精品视频在线播放| 91首页免费视频| 国产不卡在线播放| 精品综合久久久久久8888| 亚洲va国产天堂va久久en| 精品一区二区免费| 亚洲综合自拍偷拍| 中文字幕一区三区| 国产精品丝袜久久久久久app| www国产成人| 久久综合视频网| 欧美videossexotv100| 日韩视频一区二区| 欧美一二三区在线观看| 欧美高清激情brazzers| 欧美一区二区啪啪| 亚洲亚洲精品在线观看| 1000精品久久久久久久久| 国产精品入口麻豆原神| 国产欧美日韩久久| 亚洲国产精品二十页| 中文字幕免费观看一区| 日本一区二区综合亚洲| 欧美国产国产综合| 最新国产の精品合集bt伙计| 国产精品传媒视频| 一级做a爱片久久| 亚洲一区二区黄色| 日韩国产精品大片| 老司机精品视频在线| 九九九精品视频| 国产精品1024| 99亚偷拍自图区亚洲| 色综合久久久网| 欧美视频精品在线| 欧美一区二区观看视频| 精品少妇一区二区三区视频免付费| 日韩欧美国产精品| 国产嫩草影院久久久久| 亚洲另类一区二区| 婷婷中文字幕综合| 婷婷丁香久久五月婷婷| 国产一区二区三区四| 国产成人午夜片在线观看高清观看| 国产成人午夜99999| 91免费版在线| 91精品国产综合久久国产大片| 欧美不卡一二三| 国产欧美一区二区精品忘忧草| 中文字幕五月欧美| 亚洲一区电影777| 紧缚奴在线一区二区三区| 成人精品免费看| 在线观看免费亚洲| 精品国产乱码久久久久久浪潮 | 91免费版在线看| 91精品国产综合久久小美女| 久久综合色综合88| 亚洲伦理在线免费看| 蜜臀av一区二区三区| 国产aⅴ综合色| 欧美色综合天天久久综合精品| 日韩精品专区在线| 国产精品久久久久久久久久免费看| 一区二区三区精密机械公司| 精品一区二区三区视频在线观看| www.亚洲人| 日韩精品一区二区三区蜜臀| 最好看的中文字幕久久| 美女mm1313爽爽久久久蜜臀| 99综合影院在线| 亚洲视频一区二区在线| 日韩二区在线观看| 成年人国产精品| 欧美成人一区二区| 亚洲国产精品久久艾草纯爱 | 99久久精品国产毛片| 69堂亚洲精品首页| 亚洲欧美福利一区二区| 久久er精品视频| 欧美人与禽zozo性伦| 国产精品久久久久永久免费观看 | 亚洲成人免费在线观看| 成人激情av网| 2017欧美狠狠色| 日韩电影在线一区| 91黄视频在线| 亚洲色图制服丝袜| 国产91高潮流白浆在线麻豆| 欧美一级日韩不卡播放免费| 亚洲一区在线免费观看| a4yy欧美一区二区三区| 久久精品一区二区三区不卡牛牛| 日韩av一级电影| 精品视频999| 亚洲精品国产一区二区精华液 | 国产一区二区三区蝌蚪| 91麻豆精品国产91久久久更新时间| 综合分类小说区另类春色亚洲小说欧美| 韩国一区二区在线观看| 欧美一二三四区在线| 天天av天天翘天天综合网| 99r精品视频| 国产精品久久99| 国产不卡免费视频| 国产日韩av一区| 成人午夜在线免费| 欧美激情在线观看视频免费| 国产一区二区福利| 久久久久88色偷偷免费| 狠狠狠色丁香婷婷综合久久五月| 制服视频三区第一页精品| 亚洲v精品v日韩v欧美v专区| 欧美日韩一区三区| 日韩高清在线不卡| 日韩欧美国产午夜精品| 久久精品噜噜噜成人av农村| 正在播放亚洲一区| 日韩二区三区四区| 欧美大度的电影原声| 精东粉嫩av免费一区二区三区| 26uuu久久天堂性欧美| 国产精品亚洲人在线观看| 久久日韩粉嫩一区二区三区| 国产一区二区三区四区五区入口| 久久久美女毛片| 粉嫩13p一区二区三区| 亚洲欧洲av在线| 欧洲精品一区二区三区在线观看| 一区二区三区在线免费观看| 欧美婷婷六月丁香综合色| 人人精品人人爱| 久久亚洲免费视频| 成人综合在线观看| 亚洲免费观看视频| 91精品国产色综合久久不卡蜜臀 | 精品国产一区二区三区久久久蜜月 | 国产乱码精品一区二区三 | 正在播放一区二区| 久久99精品久久久久久动态图 | ●精品国产综合乱码久久久久 | 喷白浆一区二区| 久久亚洲一区二区三区明星换脸| 成人精品免费视频| 香蕉乱码成人久久天堂爱免费| 精品欧美一区二区在线观看| 风间由美性色一区二区三区| 亚洲国产综合人成综合网站| 欧美va亚洲va在线观看蝴蝶网|