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

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

?? filespy.c

?? 對本程序不隱藏 對其他程序隱藏
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*++

Copyright (c) 1989-1999  Microsoft Corporation

Module Name:

    filespy.c

Abstract:

    This is the main module of FileSpy.

    As of the Windows XP SP1 IFS Kit version of this sample and later, this
    sample can be built for each build environment released with the IFS Kit
    with no additional modifications.  To provide this capability, additional
    compile-time logic was added -- see the '#if WINVER' locations.  Comments

    tagged with the 'VERSION NOTE' header have also been added as appropriate to
    describe how the logic must change between versions.

    If this sample is built in the Windows XP environment or later, it will run
    on Windows 2000 or later.  This is done by dynamically loading the routines
    that are only available on Windows XP or later and making run-time decisions
    to determine what code to execute.  Comments tagged with 'MULTIVERISON NOTE'
    mark the locations where such logic has been added.

Environment:

    Kernel mode

--*/

//
//  Fixes Win2K compatibility regarding lookaside lists.
//

#ifndef _WIN2K_COMPAT_SLIST_USAGE
#define _WIN2K_COMPAT_SLIST_USAGE
#endif

#include <ntifs.h>
#include <stdlib.h>
#include "filespy.h"
#include "fspyKern.h"
#include "namelookup.h"


//調(diào)試信息,DBG下有效
#ifdef DBG
#define dprintf  DbgPrint
#else 
#define dprintf  
#endif


//
// Global variables.
//

HANDLE  g_hProcessId=NULL;

//
// Record : Add by lwf : 07-06-19
// Purpose: Store the hidden Directory 
//  

PWSTR   g_szHiddenDir = UNICODE_NULL;
PCHAR   g_szPrivProcName = NULL;
ULONG   g_ulPrivProcNameLen = 0;
ULONG   ProcessNameOffset;


ULONG gFileSpyDebugLevel = DEFAULT_FILESPY_DEBUG_LEVEL;
/*
#if WINVER >= 0x0501
ULONG gFileSpyAttachMode = FILESPY_ATTACH_ALL_VOLUMES;
#else
ULONG gFileSpyAttachMode = FILESPY_ATTACH_ON_DEMAND;
#endif

UNICODE_STRING gInsufficientUnicode = CONSTANT_UNICODE_STRING(L"[-=Insufficient Resources=-]");
UNICODE_STRING gEmptyUnicode = CONSTANT_UNICODE_STRING(L"");
*/

//
//  This lookaside list is used to allocate NAME_CONTROLs.  A name control
//  has a small buffer that should be big enough to handle most object names,
//  and can be resized if necessary.  These name controls are used in many
//  places to avoid allocating a large name buffer on the stack.
//
//  We allocate space for the name control from the lookaside list, which is
//  efficient because the size of the allocation is known and constant.  If more
//  buffer space is needed, we use NLCheckAndGrowNameControl which then
//  allocates more space from paged pool.
//

#define FILESPY_LOOKASIDE_SIZE  sizeof( NAME_CONTROL )
PAGED_LOOKASIDE_LIST gFileSpyNameBufferLookasideList;

PDEVICE_OBJECT gControlDeviceObject;

PDRIVER_OBJECT gFileSpyDriverObject;

#define IS_MY_CONTROL_DEVICE_OBJECT(_devObj) \
    (((_devObj) == gControlDeviceObject) ? \
            (ASSERT(((_devObj)->DriverObject == gFileSpyDriverObject) && \
                    ((_devObj)->DeviceExtension == NULL)), TRUE) : \
            FALSE)


//
//  The list of device extensions for the volume device objects we are
//  attached to (the volumes we are spying on).  Note:  This list does NOT
//  include FileSystem control device objects we are attached to.  This
//  list is used to answer the question "Which volumes are we logging?"
//

FAST_MUTEX gSpyDeviceExtensionListLock;
LIST_ENTRY gSpyDeviceExtensionList;

//
// NOTE 1:  There are some cases where we need to hold both the
//   gControlDeviceStateLock and the gOutputBufferLock at the same time.  In
//   these cases, you should acquire the gControlDeviceStateLock then the
//   gOutputBufferLock.
// NOTE 2:  The gControlDeviceStateLock MUST be a spinlock since we try to
//   acquire it during the completion path in SpyLog, which could be called at
//   DISPATCH_LEVEL (only KSPIN_LOCKs can be acquired at DISPATCH_LEVEL).
//

CONTROL_DEVICE_STATE gControlDeviceState = CLOSED;
KSPIN_LOCK gControlDeviceStateLock;

// NOTE:  Like the gControlDeviceStateLock, gOutputBufferLock MUST be a spinlock
//   since we try to acquire it during the completion path in SpyLog, which
//   could be called at DISPATCH_LEVEL (only KSPIN_LOCKs can be acquired at
//   DISPATCH_LEVEL).
//
//KSPIN_LOCK gOutputBufferLock;
//LIST_ENTRY gOutputBufferList;

#ifndef MEMORY_DBG
//NPAGED_LOOKASIDE_LIST gFreeBufferList;
#endif

//ULONG gLogSequenceNumber = 0;
//KSPIN_LOCK gLogSequenceLock;

//UNICODE_STRING gVolumeString;
//UNICODE_STRING gOverrunString;
//UNICODE_STRING gPagingIoString;

//LONG gMaxRecordsToAllocate = DEFAULT_MAX_RECORDS_TO_ALLOCATE;
//LONG gRecordsAllocated = 0;

//LONG gMaxNamesToAllocate = DEFAULT_MAX_NAMES_TO_ALLOCATE;
//LONG gNamesAllocated = 0;

//LONG gStaticBufferInUse = FALSE;
//CHAR gOutOfMemoryBuffer[RECORD_SIZE];

#if WINVER >= 0x0501
//
//  The structure of function pointers for the functions that are not available
//  on all OS versions.
//

SPY_DYNAMIC_FUNCTION_POINTERS gSpyDynamicFunctions = {0};

ULONG gSpyOsMajorVersion = 0;
ULONG gSpyOsMinorVersion = 0;
#endif

//
//  Control FileSpy statistics
//

//FILESPY_STATISTICS gStats;

//
//  This lock is used to synchronize our attaching to a given device object.
//  This lock fixes a race condition where we could accidently attach to the
//  same device object more then once.  This race condition only occurs if
//  a volume is being mounted at the same time as this filter is being loaded.
//  This problem will never occur if this filter is loaded at boot time before
//  any file systems are loaded.
//
//  This lock is used to atomically test if we are already attached to a given
//  device object and if not, do the attach.
//

FAST_MUTEX gSpyAttachLock;

//
//  Macro for validating the FastIo dispatch routines before calling
//  them in the FastIo pass through functions.
//

#define VALID_FAST_IO_DISPATCH_HANDLER(FastIoDispatchPtr, FieldName) \
    (((FastIoDispatchPtr) != NULL) && \
     (((FastIoDispatchPtr)->SizeOfFastIoDispatch) >= \
      (FIELD_OFFSET(FAST_IO_DISPATCH, FieldName) + sizeof(VOID *))) && \
     ((FastIoDispatchPtr)->FieldName != NULL))

//
//  list of known device types
//

const PCHAR DeviceTypeNames[] = {
    "",
    "BEEP",
    "CD_ROM",
    "CD_ROM_FILE_SYSTEM",
    "CONTROLLER",
    "DATALINK",
    "DFS",
    "DISK",
    "DISK_FILE_SYSTEM",
    "FILE_SYSTEM",
    "INPORT_PORT",
    "KEYBOARD",
    "MAILSLOT",
    "MIDI_IN",
    "MIDI_OUT",
    "MOUSE",
    "MULTI_UNC_PROVIDER",
    "NAMED_PIPE",
    "NETWORK",
    "NETWORK_BROWSER",
    "NETWORK_FILE_SYSTEM",
    "NULL",
    "PARALLEL_PORT",
    "PHYSICAL_NETCARD",
    "PRINTER",
    "SCANNER",
    "SERIAL_MOUSE_PORT",
    "SERIAL_PORT",
    "SCREEN",
    "SOUND",
    "STREAMS",
    "TAPE",
    "TAPE_FILE_SYSTEM",
    "TRANSPORT",
    "UNKNOWN",
    "VIDEO",
    "VIRTUAL_DISK",
    "WAVE_IN",
    "WAVE_OUT",
    "8042_PORT",
    "NETWORK_REDIRECTOR",
    "BATTERY",
    "BUS_EXTENDER",
    "MODEM",
    "VDM",
    "MASS_STORAGE",
    "SMB",
    "KS",
    "CHANGER",
    "SMARTCARD",
    "ACPI",
    "DVD",
    "FULLSCREEN_VIDEO",
    "DFS_FILE_SYSTEM",
    "DFS_VOLUME",
    "SERENUM",
    "TERMSRV",
    "KSEC"
};

//
//  We need this because the compiler doesn't like doing sizeof an external
//  array in the other file that needs it (fspylib.c)
//

ULONG SizeOfDeviceTypeNames = sizeof( DeviceTypeNames );

//
//  Since functions in drivers are non-pageable by default, these pragmas
//  allow the driver writer to tell the system what functions can be paged.
//
//  Use the PAGED_CODE() macro at the beginning of these functions'
//  implementations while debugging to ensure that these routines are
//  never called at IRQL > APC_LEVEL (therefore the routine cannot
//  be paged).
//
#if DBG && WINVER >= 0x0501
VOID
DriverUnload(
    IN PDRIVER_OBJECT DriverObject
    );
#endif

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

//
// Record : add by lwf : 07-06-20
// Purpose: forward delaration
//   

ULONG 
SpyGetProcessNameOffset(
    VOID
    );
    
PCHAR
SpyGetProcess( 
    PCHAR ProcessName 
    );
        
PCHAR
SpyGetRequestProcess( 				 
    PCHAR ProcessName, 
	  PIRP  pIrp
    );
    
BOOLEAN
IsDirectory(
    ULONG dirattr
		);
            
#ifdef ALLOC_PRAGMA

#pragma alloc_text(INIT, DriverEntry)
#if DBG && WINVER >= 0x0501
#pragma alloc_text(PAGE, DriverUnload)
#endif
#pragma alloc_text(PAGE, SpyFsNotification)
#pragma alloc_text(PAGE, SpyClose)
#pragma alloc_text(PAGE, SpyDirControl)
#pragma alloc_text(PAGE, SpyFsControl)
#pragma alloc_text(PAGE, SpyFsControlMountVolume)
#pragma alloc_text(PAGE, SpyFsControlMountVolumeComplete)
#pragma alloc_text(PAGE, SpyFsControlLoadFileSystem)
#pragma alloc_text(PAGE, SpyFsControlLoadFileSystemComplete)
#pragma alloc_text(PAGE, SpyFastIoCheckIfPossible)
#pragma alloc_text(PAGE, SpyFastIoRead)
#pragma alloc_text(PAGE, SpyFastIoWrite)
#pragma alloc_text(PAGE, SpyFastIoQueryBasicInfo)
#pragma alloc_text(PAGE, SpyFastIoQueryStandardInfo)
#pragma alloc_text(PAGE, SpyFastIoLock)
#pragma alloc_text(PAGE, SpyFastIoUnlockSingle)
#pragma alloc_text(PAGE, SpyFastIoUnlockAll)
#pragma alloc_text(PAGE, SpyFastIoUnlockAllByKey)
#pragma alloc_text(PAGE, SpyFastIoDeviceControl)
#pragma alloc_text(PAGE, SpyFastIoDetachDevice)
#pragma alloc_text(PAGE, SpyFastIoQueryNetworkOpenInfo)
#pragma alloc_text(PAGE, SpyFastIoMdlRead)
#pragma alloc_text(PAGE, SpyFastIoPrepareMdlWrite)
#pragma alloc_text(PAGE, SpyFastIoReadCompressed)
#pragma alloc_text(PAGE, SpyFastIoWriteCompressed)
#pragma alloc_text(PAGE, SpyFastIoQueryOpen)
#pragma alloc_text(PAGE, SpyCommonDeviceIoControl)

#endif

// 
// Directory control structure
//
typedef struct {
    ULONG Length;
    PUNICODE_STRING FileName;
    FILE_INFORMATION_CLASS FileInformationClass;
    ULONG FileIndex;
} QUERY_DIRECTORY, *PQUERY_DIRECTORY;

NTSTATUS
SpyDirControlCompletion(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
    )
{
    UNREFERENCED_PARAMETER(DeviceObject);
    UNREFERENCED_PARAMETER(Irp);

    KeSetEvent((PKEVENT) Context, IO_NO_INCREMENT, FALSE);

    return STATUS_MORE_PROCESSING_REQUIRED;
}

NTSTATUS
SpyDirControl(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
    PFILESPY_DEVICE_EXTENSION devExt;
    PIO_STACK_LOCATION irpSp;
    PFILE_OBJECT FileObject;
    KEVENT waitEvent;
    NTSTATUS status;
    ULONG bufferLength;
    ULONG newLength;
    ULONG offset;
    ULONG currentPosition;
    PFILE_BOTH_DIR_INFORMATION dirInfo = NULL;
    PFILE_BOTH_DIR_INFORMATION preDirInfo = NULL;
    CHAR  name[PROCNAMELEN];
    PWSTR fileNameBuffer = UNICODE_NULL;

	if(gControlDeviceState == CLOSED || PsGetCurrentProcessId()==g_hProcessId)
	{
        return SpyDispatch(DeviceObject,Irp);
	}

	devExt = DeviceObject->DeviceExtension;
	irpSp = IoGetCurrentIrpStackLocation(Irp);
	FileObject = irpSp->FileObject;

  PAGED_CODE();

//  if (IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject)) {
//        Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
//        Irp->IoStatus.Information = 0; 
//        IoCompleteRequest(Irp, IO_NO_INCREMENT);
//        return STATUS_INVALID_DEVICE_REQUEST;
//    }

    if (Irp->RequestorMode == KernelMode) {

        IoSkipCurrentIrpStackLocation(Irp);
        return IoCallDriver(devExt->NLExtHeader.AttachedToDeviceObject, Irp);
    }

    if (FileBothDirectoryInformation != ((PQUERY_DIRECTORY)&irpSp->Parameters)->FileInformationClass) {

        IoSkipCurrentIrpStackLocation(Irp);
        return IoCallDriver(devExt->NLExtHeader.AttachedToDeviceObject, Irp);
    }

    KeInitializeEvent(&waitEvent, NotificationEvent, FALSE);
    

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国欧美国产1区| 亚洲国产一区视频| 国产99久久久久久免费看农村| 欧美成人猛片aaaaaaa| 国产一区在线视频| 国产香蕉久久精品综合网| 成人精品电影在线观看| 亚洲精品美国一| 7777精品伊人久久久大香线蕉超级流畅| 视频一区在线播放| 久久综合成人精品亚洲另类欧美 | 亚洲高清中文字幕| 欧美精品黑人性xxxx| 欧美96一区二区免费视频| 2020国产精品| 97精品久久久午夜一区二区三区 | 在线综合视频播放| 国产黄人亚洲片| 一区二区三区欧美| 欧美一个色资源| www.欧美日韩国产在线| 亚洲一区二区视频在线| 欧美mv日韩mv| 91网站最新地址| 美女看a上一区| 国产精品国产三级国产有无不卡 | 欧美日韩久久不卡| 国内久久精品视频| 亚洲青青青在线视频| 91精品国产综合久久福利软件| 国产传媒久久文化传媒| 亚洲国产美国国产综合一区二区| 26uuu亚洲综合色| 在线观看国产91| 成人性生交大片免费看在线播放 | 日本高清成人免费播放| 激情综合色综合久久综合| 中文字幕一区在线观看| 日韩欧美一区二区视频| 91麻豆免费看片| 国产精品亚洲视频| 午夜不卡av免费| 亚洲手机成人高清视频| 久久久精品免费网站| 91精品国产乱| 欧美色综合网站| 91麻豆精品在线观看| 国产成人精品午夜视频免费| 肉色丝袜一区二区| 一级日本不卡的影视| 国产欧美日韩在线| 亚洲精品一区二区三区福利| 欧美区一区二区三区| 色综合久久久网| caoporn国产一区二区| 国产一二三精品| 另类成人小视频在线| 香蕉加勒比综合久久| 亚洲人一二三区| 国产精品久久三| 日本一区二区三区国色天香| 欧美va在线播放| 精品久久久久香蕉网| 欧美老女人第四色| 欧美日韩国产首页| 欧美日韩视频专区在线播放| 在线视频国内一区二区| 成人小视频在线观看| 国产福利91精品一区| 国产在线一区观看| 国产激情一区二区三区四区| 国产精品18久久久久久久久久久久 | 国产欧美视频一区二区| 久久免费看少妇高潮| 国产亚洲欧美一区在线观看| 久久久影院官网| 国产亚洲一区二区三区在线观看 | 欧美一区二区人人喊爽| 亚洲一区日韩精品中文字幕| 中文字幕一区在线| 亚洲男同性恋视频| 亚洲制服欧美中文字幕中文字幕| 亚洲欧美色图小说| 亚洲一区二区成人在线观看| 亚洲图片欧美色图| 日韩二区三区在线观看| 欧美aaaaa成人免费观看视频| 日韩国产在线观看一区| 久久国产人妖系列| 国产一区二区三区久久久| 国产99久久久国产精品潘金网站| av一本久道久久综合久久鬼色| av一区二区三区黑人| 欧美午夜理伦三级在线观看| 欧美日韩黄色一区二区| 日韩欧美国产综合一区| 欧美精品一区二区蜜臀亚洲| 国产清纯白嫩初高生在线观看91 | 亚洲免费三区一区二区| 亚洲午夜免费电影| 久久精品久久精品| 粉嫩一区二区三区性色av| 色诱亚洲精品久久久久久| 欧美精品在欧美一区二区少妇| 欧美一区二区三区免费观看视频| 精品免费国产二区三区| 中文字幕在线播放不卡一区| 亚洲一区电影777| 精品在线播放午夜| 93久久精品日日躁夜夜躁欧美| 欧美三级午夜理伦三级中视频| 欧美成人乱码一区二区三区| 国产精品不卡在线观看| 五月婷婷综合网| 国产a区久久久| 欧美日韩国产成人在线91| 久久无码av三级| 亚洲电影一级片| 国产成人免费网站| 欧美日韩国产小视频| 精品国产免费一区二区三区香蕉| 亚洲日本免费电影| 黄色小说综合网站| 精品视频999| 国产精品美女久久久久久久网站| 亚洲小说欧美激情另类| 国v精品久久久网| 日韩三级高清在线| 一区二区三区四区国产精品| 狠狠色丁香婷综合久久| 色天使久久综合网天天| 久久久久高清精品| 日本最新不卡在线| 在线观看视频一区二区欧美日韩| 26uuu欧美日本| 日韩高清不卡一区二区| 欧洲一区二区三区在线| 欧美激情综合五月色丁香| 喷白浆一区二区| 欧美在线观看一区| 日韩理论在线观看| 国产成人精品影院| 精品粉嫩超白一线天av| 天天av天天翘天天综合网| 97久久精品人人澡人人爽| 国产欧美一区二区三区在线老狼 | 国产精品主播直播| 日韩女优毛片在线| 婷婷综合五月天| 欧美日韩精品久久久| 一区二区三区在线不卡| av资源站一区| 国产精品灌醉下药二区| 国产成人免费在线视频| 久久久久久久精| 国模套图日韩精品一区二区 | 青椒成人免费视频| 欧美日韩一卡二卡| 亚洲午夜日本在线观看| 欧美亚洲一区二区在线观看| 亚洲免费av网站| 色婷婷久久久久swag精品 | 91精品国产入口在线| 亚洲成年人影院| 欧美日韩一级片在线观看| 亚洲一二三四在线观看| 在线视频一区二区三区| 亚洲欧美偷拍卡通变态| 色香蕉久久蜜桃| 一级做a爱片久久| 在线电影一区二区三区| 日韩高清国产一区在线| 欧美不卡一二三| 国产精品主播直播| 中文字幕乱码久久午夜不卡 | 欧美日韩精品免费观看视频| 亚洲午夜国产一区99re久久| 欧美绝品在线观看成人午夜影视| 日韩高清欧美激情| 精品国产一区二区精华| 国产成人免费视频网站高清观看视频| 欧美国产视频在线| 91论坛在线播放| 亚洲线精品一区二区三区八戒| 欧美精品乱人伦久久久久久| 日韩av电影一区| 国产色产综合产在线视频| 成人a免费在线看| 亚洲大尺度视频在线观看| 日韩视频中午一区| 国产91高潮流白浆在线麻豆| 亚洲乱码中文字幕| 9191国产精品| 国产精品18久久久久| 亚洲综合视频在线观看| 91精品国产高清一区二区三区 | 成人国产精品免费观看动漫 | 555www色欧美视频| 国产一区二区三区国产| 一区二区三区免费网站|