青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

elva

文件加密標識 -隱藏文件頭的黑客代碼

文件加密標識 -隱藏文件頭的黑客代碼

//This module hooks:
// IRP_MJ_READ, IRP_MJ_WRITE, IRP_MJ_QUERY_INFORMATION,
// IRP_MJ_SET_INFORMATION, IRP_MJ_DIRECTORY_CONTROL,
// FASTIO_QUERY_STANDARD_INFO FASTIO_QUERY_BASIC_INFO FASTIO_READ(WRITE)
//to hide first N bytes of given file

extern "C" {
#include <ntddk.h>
}
#pragma hdrstop("InterceptIO.pch")

/////////////////////////////////////////////////////////////////////
// Undocumented structures missing in ntddk.h

typedef struct _FILE_INTERNAL_INFORMATION { // Information Class 6
  LARGE_INTEGER FileId;
} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;

typedef struct _FILE_EA_INFORMATION { // Information Class 7
  ULONG EaInformationLength;
} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;

typedef struct _FILE_ACCESS_INFORMATION { // Information Class 8
  ACCESS_MASK GrantedAccess;
} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;

typedef struct _FILE_MODE_INFORMATION { // Information Class 16
  ULONG Mode;
} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;

typedef struct _FILE_ALLOCATION_INFORMATION { // Information Class 19
  LARGE_INTEGER AllocationSize;
} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;

typedef struct _FILE_DIRECTORY_INFORMATION {
  ULONG NextEntryOffset;
  ULONG FileIndex;
  LARGE_INTEGER CreationTime;
  LARGE_INTEGER LastAccessTime;
  LARGE_INTEGER LastWriteTime;
  LARGE_INTEGER ChangeTime;
  LARGE_INTEGER EndOfFile;
  LARGE_INTEGER AllocationSize;
  ULONG FileAttributes;
  ULONG FileNameLength;
  WCHAR FileName[1];
} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;

typedef struct _FILE_ALL_INFORMATION { // Information Class 18
  FILE_BASIC_INFORMATION BasicInformation;
  FILE_STANDARD_INFORMATION StandardInformation;
  FILE_INTERNAL_INFORMATION InternalInformation;
  FILE_EA_INFORMATION EaInformation;
  FILE_ACCESS_INFORMATION AccessInformation;
  FILE_POSITION_INFORMATION PositionInformation;
  FILE_MODE_INFORMATION ModeInformation;
  FILE_ALIGNMENT_INFORMATION AlignmentInformation;
  FILE_NAME_INFORMATION NameInformation;
} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;

typedef struct tag_QUERY_DIRECTORY
{
  ULONG Length;
  PUNICODE_STRING FileName;
  FILE_INFORMATION_CLASS FileInformationClass;
  ULONG FileIndex;
} QUERY_DIRECTORY, *PQUERY_DIRECTORY;

#pragma pack(push, 4)

typedef struct tag_FQD_SmallCommonBlock
{
  ULONG NextEntryOffset;
  ULONG FileIndex;
} FQD_SmallCommonBlock, *PFQD_SmallCommonBlock;

typedef struct tag_FQD_FILE_ATTR
{
  TIME CreationTime;
  TIME LastAccessTime;
  TIME LastWriteTime;
  TIME ChangeTime;
  LARGE_INTEGER EndOfFile;
  LARGE_INTEGER AllocationSize;
  ULONG FileAttributes;
} FQD_FILE_ATTR, *PFQD_FILE_ATTR;

typedef struct tag_FQD_CommonBlock
{
  FQD_SmallCommonBlock SmallCommonBlock;
  FQD_FILE_ATTR FileAttr;
  ULONG FileNameLength;
} FQD_CommonBlock, *PFQD_CommonBlock;

typedef struct _KFILE_DIRECTORY_INFORMATION
{
  FQD_CommonBlock CommonBlock;
 
  WCHAR FileName[ANYSIZE_ARRAY];
} KFILE_DIRECTORY_INFORMATION, *PKFILE_DIRECTORY_INFORMATION;

typedef struct _KFILE_FULL_DIR_INFORMATION
{
  FQD_CommonBlock CommonBlock;
 
  ULONG EaSize;
  WCHAR FileName[ANYSIZE_ARRAY];
} KFILE_FULL_DIR_INFORMATION, *PKFILE_FULL_DIR_INFORMATION;

typedef struct _KFILE_BOTH_DIR_INFORMATION
{
  FQD_CommonBlock CommonBlock;
 
  ULONG EaSize;
  USHORT ShortFileNameLength;
  WCHAR ShortFileName[12];
  WCHAR FileName[ANYSIZE_ARRAY];
} KFILE_BOTH_DIR_INFORMATION, *PKFILE_BOTH_DIR_INFORMATION;

#pragma pack(pop)

/////////////////////////////////////////////////////////////////////
// Global variables
PDRIVER_OBJECT pDriverObject;
PDRIVER_DISPATCH OldReadDisp, OldWriteDisp, OldQueryDisp, OldSetInfoDisp, OldDirCtlDisp;
PFAST_IO_READ OldFastIoReadDisp;
PFAST_IO_WRITE OldFastIoWriteDisp;
PFAST_IO_QUERY_STANDARD_INFO OldFastIoQueryStandartInfoDisp;

//Size of our file's Invisible Part (in bytes)
ULONG InvisiblePartSize = 10;
//File, part of which we want to hide
wchar_t OurFileName[] = L"testing.fil";

//Size of OurFileName in bytes, excluding null terminator
ULONG OurFileNameLen = sizeof(OurFileName) - sizeof(wchar_t);


/////////////////////////////////////////////////////////////////////
// Functions

//Function returns true if FN matches OurFileName
bool ThisIsOurFile(PUNICODE_STRING FN)
{
  return ((FN->Buffer) &&
    (FN->Length >= OurFileNameLen) &&
    _wcsnicmp((wchar_t*)((char*)FN->Buffer + FN->Length - OurFileNameLen),
    OurFileName, OurFileNameLen/2)==0);
}

//Structure used to track IRPs which completion must be handled
struct s_ComplRtnTrack
{
  PIO_COMPLETION_ROUTINE CompletionRoutine;
  PVOID Context;
  //When CompletionRoutine is called, flags corresponds to InvokeOn*
  UCHAR Control;
  PIO_STACK_LOCATION CISL;
  FILE_INFORMATION_CLASS FileInformationClass;
  PVOID Buffer;
};

//Function set new CompletionRoutine, InvokeOnSuccess flag,
//and copies original fields to Context
void HookIrpCompletion(PIO_STACK_LOCATION CISL,
              PIO_COMPLETION_ROUTINE CompletionRoutine,
              PVOID Buffer,
              FILE_INFORMATION_CLASS FileInformationClass)
{
  s_ComplRtnTrack* NewContext =
    (s_ComplRtnTrack*)ExAllocatePool(NonPagedPool, sizeof(s_ComplRtnTrack));
  NewContext->CompletionRoutine = CISL->CompletionRoutine;
  NewContext->Context = CISL->Context;
  NewContext->Control = CISL->Control;
  NewContext->CISL = CISL;
  //Since CISL.Parameters unavailabile in IrpCompletion handler,
  //let's save all necessary data in Context structure
  NewContext->FileInformationClass = FileInformationClass;
  NewContext->Buffer = Buffer;
  CISL->CompletionRoutine = CompletionRoutine;
  CISL->Context = NewContext;
  CISL->Control |= SL_INVOKE_ON_SUCCESS;
}

//Function handles IRP completion
NTSTATUS NewComplRtn (
              IN PDEVICE_OBJECT DeviceObject,
              IN PIRP Irp,
              s_ComplRtnTrack* CXT)
{
  //Handle different types of IRP
  switch (CXT->CISL->MajorFunction)
  {
  case IRP_MJ_QUERY_INFORMATION:
    _asm int 3;
    //ThisIsOurFile is already tested
    switch (CXT->FileInformationClass)
    {
        //In all cases modify CurrentByteOffset and/or size (EndOfFile)
        //to hide first InvisiblePartSize bytes
    case FilePositionInformation:
        ((PFILE_POSITION_INFORMATION)CXT->Buffer)->CurrentByteOffset.QuadPart -= InvisiblePartSize;
        break;
    case FileEndOfFileInformation:
        ((PFILE_END_OF_FILE_INFORMATION)CXT->Buffer)->EndOfFile.QuadPart -= InvisiblePartSize;
        break;
    case FileStandardInformation:
        ((PFILE_STANDARD_INFORMATION)CXT->Buffer)->EndOfFile.QuadPart -= InvisiblePartSize;
        break;
    case FileAllocationInformation:
        ((PFILE_ALLOCATION_INFORMATION)CXT->Buffer)->AllocationSize.QuadPart -= InvisiblePartSize;
        break;
    case FileAllInformation:
        ((PFILE_ALL_INFORMATION)CXT->Buffer)->PositionInformation.CurrentByteOffset.QuadPart -= InvisiblePartSize;
        ((PFILE_ALL_INFORMATION)CXT->Buffer)->StandardInformation.EndOfFile.QuadPart -= InvisiblePartSize;
        break;
    }
    case IRP_MJ_DIRECTORY_CONTROL:
        //Get a pointer to first directory entries
        PFQD_SmallCommonBlock pQueryDirWin32 = (PFQD_SmallCommonBlock)CXT->Buffer;
        //Cycle through directory entries
        while (1)
        {
          PWCHAR pFileName = 0;
          ULONG dwFileNameLength = 0;
          switch (CXT->FileInformationClass)
          {
            //In all cases get pointer to FileName and FileNameLength
          case FileDirectoryInformation:
            dwFileNameLength = ((PKFILE_DIRECTORY_INFORMATION)pQueryDirWin32)->CommonBlock.FileNameLength;
            pFileName = ((PKFILE_DIRECTORY_INFORMATION)pQueryDirWin32)->FileName;
            break;
          case FileFullDirectoryInformation:
            dwFileNameLength = ((PKFILE_FULL_DIR_INFORMATION)pQueryDirWin32)->CommonBlock.FileNameLength;
            pFileName = ((PKFILE_FULL_DIR_INFORMATION)pQueryDirWin32)->FileName;
            break;
          case FileBothDirectoryInformation:
            dwFileNameLength = ((PKFILE_BOTH_DIR_INFORMATION)pQueryDirWin32)->CommonBlock.FileNameLength;
            pFileName = ((PKFILE_BOTH_DIR_INFORMATION)pQueryDirWin32)->FileName;
            break;
          }
          //_asm int 3;
          //Is this file that we want?
          if ((dwFileNameLength == OurFileNameLen) &&
            _wcsnicmp(pFileName, OurFileName, OurFileNameLen/2)==0)
          {
            //_asm int 3;
            //Hide first InvisiblePartSize bytes
            ((PFQD_CommonBlock)pQueryDirWin32)->FileAttr.EndOfFile.QuadPart -= InvisiblePartSize;
            break;
          }
          //Quit if no more directory entries
          if (!pQueryDirWin32->NextEntryOffset) break;
          //Continue with next directory entry
          pQueryDirWin32 = (PFQD_SmallCommonBlock)((CHAR*)pQueryDirWin32 + pQueryDirWin32->NextEntryOffset);
        }
       
  }
  //If appropriate Control flag was set,...
  if (
    ((CXT->Control == SL_INVOKE_ON_SUCCESS)&&(NT_SUCCESS(Irp->IoStatus.Status)))
    || ((CXT->Control == SL_INVOKE_ON_ERROR)&&(NT_ERROR(Irp->IoStatus.Status)))
    || ((CXT->Control == SL_INVOKE_ON_CANCEL)&&(Irp->IoStatus.Status == STATUS_CANCELLED)) )
    //...call original CompletionRoutine
    return CXT->CompletionRoutine(
    DeviceObject,
    Irp,
    CXT->Context);
  else return STATUS_SUCCESS;
}

//Filename IRP handler deal with
#define FName &(CISL->FileObject->FileName)

//Function handles IRP_MJ_READ and IRP_MJ_WRITE
NTSTATUS NewReadWriteDisp (
                  IN PDEVICE_OBJECT DeviceObject,
                  IN PIRP Irp)
{
  //_asm int 3;
  PIO_STACK_LOCATION CISL = IoGetCurrentIrpStackLocation(Irp);
  if (CISL->FileObject &&
    //Don't mess with swaping
    !(Irp->Flags & IRP_PAGING_IO) && !(Irp->Flags & IRP_SYNCHRONOUS_PAGING_IO))
  {
    if (ThisIsOurFile(FName))
    {
        //_asm int 3;
        CISL->Parameters.Write.ByteOffset.QuadPart += InvisiblePartSize;
        //Write and Read has the same structure, thus handled together
    }
  }
  //Call corresponding original handler
  switch (CISL->MajorFunction)
  {
  case IRP_MJ_READ:
    return OldReadDisp(DeviceObject, Irp);
  case IRP_MJ_WRITE:
    return OldWriteDisp(DeviceObject, Irp);
  }
}

//Function handles IRP_MJ_QUERY_INFORMATION
NTSTATUS NewQueryDisp (
              IN PDEVICE_OBJECT DeviceObject,
              IN PIRP Irp)
{
  //_asm int 3;
  PIO_STACK_LOCATION CISL = IoGetCurrentIrpStackLocation(Irp);
  if ((CISL->MajorFunction == IRP_MJ_QUERY_INFORMATION) &&
    ThisIsOurFile(FName))
  {
    //_asm int 3;
    switch (CISL->Parameters.QueryFile.FileInformationClass)
    {
        //Information types that contains file size or current offset
    case FilePositionInformation:
    case FileEndOfFileInformation:
    case FileStandardInformation:
    case FileAllocationInformation:
    case FileAllInformation:
        //_asm int 3;
        HookIrpCompletion(CISL, (PIO_COMPLETION_ROUTINE)NewComplRtn, Irp->AssociatedIrp.SystemBuffer, CISL->Parameters.QueryFile.FileInformationClass);
    }
  }
  //Call original handler
  return OldQueryDisp(DeviceObject, Irp);
}

//Function handles IRP_MJ_SET_INFORMATION
NTSTATUS NewSetInfoDisp (
                IN PDEVICE_OBJECT DeviceObject,
                IN PIRP Irp)
{
  //_asm int 3;
  PIO_STACK_LOCATION CISL = IoGetCurrentIrpStackLocation(Irp);
  if (CISL->FileObject && ThisIsOurFile(FName))
  {
    //_asm int 3;
    switch (CISL->Parameters.QueryFile.FileInformationClass)
    {
        //Information types that contains file size or current offset.
        //In all cases modify CurrentByteOffset and/or size (EndOfFile)
        //to hide first InvisiblePartSize bytes
    case FilePositionInformation:
        ((PFILE_POSITION_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->CurrentByteOffset.QuadPart += InvisiblePartSize;
        break;
    case FileEndOfFileInformation:
        ((PFILE_END_OF_FILE_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->EndOfFile.QuadPart += InvisiblePartSize;
        break;
    case FileStandardInformation:
        ((PFILE_STANDARD_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->EndOfFile.QuadPart += InvisiblePartSize;
        break;
    case FileAllocationInformation:
        //_asm int 3;
        ((PFILE_ALLOCATION_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->AllocationSize.QuadPart += InvisiblePartSize;
        break;
    case FileAllInformation:
        ((PFILE_ALL_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->PositionInformation.CurrentByteOffset.QuadPart += InvisiblePartSize;
        ((PFILE_ALL_INFORMATION)Irp->AssociatedIrp.SystemBuffer)->StandardInformation.EndOfFile.QuadPart += InvisiblePartSize;
        break;
    }
  }
  //Call original handler
  return OldSetInfoDisp(DeviceObject, Irp);
}

//Function handles IRP_MJ_DIRECTORY_CONTROL
NTSTATUS NewDirCtlDisp (
                IN PDEVICE_OBJECT DeviceObject,
                IN PIRP Irp)
{
  void *pBuffer;
  PIO_STACK_LOCATION CISL = IoGetCurrentIrpStackLocation(Irp);
  //_asm int 3;
  if ((CISL->MajorFunction == IRP_MJ_DIRECTORY_CONTROL) &&
    (CISL->MinorFunction == IRP_MN_QUERY_DIRECTORY))
  {
    //Handle both ways of passing user supplied buffer
    if (Irp->MdlAddress)
        pBuffer = MmGetSystemAddressForMdl(Irp->MdlAddress);
    else
        pBuffer = Irp->UserBuffer;
    HookIrpCompletion(CISL, (PIO_COMPLETION_ROUTINE)NewComplRtn, pBuffer, ((PQUERY_DIRECTORY)(&CISL->Parameters))->FileInformationClass);
  }
  //Call original handler
  return OldDirCtlDisp(DeviceObject, Irp);
}

#undef FName

//Function handles FastIoRead
BOOLEAN NewFastIoRead(
              IN PFILE_OBJECT FileObject,
              IN PLARGE_INTEGER FileOffset,
              IN ULONG Length,
              IN BOOLEAN Wait,
              IN ULONG LockKey,
              OUT PVOID Buffer,
              OUT PIO_STATUS_BLOCK IoStatus,
              IN PDEVICE_OBJECT DeviceObject
              )
{
  LARGE_INTEGER NewFileOffset;
  //_asm int 3;
  if ((FileObject) && (ThisIsOurFile(&FileObject->FileName)))
  {
    //_asm int 3;
    //Modify FileOffset to hide first InvisiblePartSize bytes
    NewFileOffset.QuadPart = FileOffset->QuadPart + InvisiblePartSize;
    return OldFastIoReadDisp(FileObject, &NewFileOffset, Length, Wait, LockKey, Buffer,
        IoStatus, DeviceObject);
  }
  //Call original handler
  return OldFastIoReadDisp(FileObject, FileOffset, Length, Wait, LockKey, Buffer,
    IoStatus, DeviceObject);
}

//Function handles FastIoWrite
BOOLEAN NewFastIoWrite(
              IN PFILE_OBJECT FileObject,
              IN PLARGE_INTEGER FileOffset,
              IN ULONG Length,
              IN BOOLEAN Wait,
              IN ULONG LockKey,
              OUT PVOID Buffer,
              OUT PIO_STATUS_BLOCK IoStatus,
              IN PDEVICE_OBJECT DeviceObject
              )
{
  LARGE_INTEGER NewFileOffset;
  //_asm int 3;
  if ((FileObject) && (ThisIsOurFile(&FileObject->FileName)))
  {
    //_asm int 3;
    //Modify FileOffset to hide first InvisiblePartSize bytes
    NewFileOffset.QuadPart = FileOffset->QuadPart + InvisiblePartSize;
    return OldFastIoWriteDisp(FileObject, &NewFileOffset, Length, Wait, LockKey, Buffer,
        IoStatus, DeviceObject);
  }
  return OldFastIoWriteDisp(FileObject, FileOffset, Length, Wait, LockKey, Buffer,
    IoStatus, DeviceObject);
}

//Function handles FastIoQueryStandartInfo
BOOLEAN NewFastIoQueryStandartInfo(
                      IN struct _FILE_OBJECT *FileObject,
                      IN BOOLEAN Wait,
                      OUT PFILE_STANDARD_INFORMATION Buffer,
                      OUT PIO_STATUS_BLOCK IoStatus,
                      IN struct _DEVICE_OBJECT *DeviceObject
                      )
{
  //Call original handler
  BOOLEAN status = OldFastIoQueryStandartInfoDisp(FileObject, Wait, Buffer, IoStatus, DeviceObject);
  if ((FileObject) && (ThisIsOurFile(&FileObject->FileName)))
  {
    //_asm int 3;
    //Modify EndOfFile to hide first InvisiblePartSize bytes
    Buffer->EndOfFile.QuadPart -= InvisiblePartSize;
  }
  return status;
}

extern "C"
NTSYSAPI
NTSTATUS
NTAPI
ObReferenceObjectByName(
                IN PUNICODE_STRING ObjectPath,
                IN ULONG Attributes,
                IN PACCESS_STATE PassedAccessState OPTIONAL,
                IN ACCESS_MASK DesiredAccess OPTIONAL,
                IN POBJECT_TYPE ObjectType,
                IN KPROCESSOR_MODE AccessMode,
                IN OUT PVOID ParseContext OPTIONAL,
                OUT PVOID *ObjectPtr
                );

extern "C" PVOID IoDriverObjectType;

//Function hooks given dispatch function (MajorFunction)
VOID InterceptFunction(UCHAR MajorFunction,
              PDRIVER_OBJECT pDriverObject,
              OPTIONAL PDRIVER_DISPATCH *OldFunctionPtr,
              OPTIONAL PDRIVER_DISPATCH NewFunctionPtr)
{
  PDRIVER_DISPATCH *TargetFn;
 
  TargetFn = &(pDriverObject->MajorFunction[MajorFunction]);
  //hook only if handler exists
  if (*TargetFn)
  {
    if (OldFunctionPtr) *OldFunctionPtr = *TargetFn;
    if (NewFunctionPtr) *TargetFn = NewFunctionPtr;
  }
}

//Function hooks given driver's dispatch functions
NTSTATUS Intercept(PWSTR pwszDeviceName)
{
  UNICODE_STRING DeviceName;
  NTSTATUS status;
  KIRQL OldIrql;
 
  _asm int 3;
 
  pDriverObject = NULL;
  RtlInitUnicodeString(&DeviceName, pwszDeviceName);
  status = ObReferenceObjectByName(&DeviceName, OBJ_CASE_INSENSITIVE, NULL, 0, (POBJECT_TYPE)IoDriverObjectType, KernelMode, NULL, (PVOID*)&pDriverObject);
  if (pDriverObject)
  {
    //Raise IRQL to avoid context switch
    //when some pointer is semi-modified
    KeRaiseIrql(HIGH_LEVEL, &OldIrql);
    //hook dispatch functions
    InterceptFunction(IRP_MJ_READ, pDriverObject, &OldReadDisp, NewReadWriteDisp);
    InterceptFunction(IRP_MJ_WRITE, pDriverObject, &OldWriteDisp, NewReadWriteDisp);
    InterceptFunction(IRP_MJ_QUERY_INFORMATION, pDriverObject, &OldQueryDisp, NewQueryDisp);
    InterceptFunction(IRP_MJ_SET_INFORMATION, pDriverObject, &OldSetInfoDisp, NewSetInfoDisp);
    InterceptFunction(IRP_MJ_DIRECTORY_CONTROL, pDriverObject, &OldDirCtlDisp, NewDirCtlDisp);
    //hook FastIo dispatch functions if FastIo table exists
    if (pDriverObject->FastIoDispatch)
    {
        //It would be better to copy FastIo table to avoid
        //messing with kernel memory protection, but it works as it is
        OldFastIoReadDisp = pDriverObject->FastIoDispatch->FastIoRead;
        pDriverObject->FastIoDispatch->FastIoRead = NewFastIoRead;
        OldFastIoWriteDisp = pDriverObject->FastIoDispatch->FastIoWrite;
        pDriverObject->FastIoDispatch->FastIoWrite = NewFastIoWrite;
        OldFastIoQueryStandartInfoDisp = pDriverObject->FastIoDispatch->FastIoQueryStandardInfo;
        pDriverObject->FastIoDispatch->FastIoQueryStandardInfo = NewFastIoQueryStandartInfo;
    }
    KeLowerIrql(OldIrql);
  }
 
  return status;
}

//Function cancels hooking
VOID UnIntercept()
{
  KIRQL OldIrql;
  if (pDriverObject)
  {
    KeRaiseIrql(HIGH_LEVEL, &OldIrql);
    InterceptFunction(IRP_MJ_READ, pDriverObject, NULL, OldReadDisp);
    InterceptFunction(IRP_MJ_WRITE, pDriverObject, NULL, OldWriteDisp);
    InterceptFunction(IRP_MJ_QUERY_INFORMATION, pDriverObject, NULL, OldQueryDisp);
    InterceptFunction(IRP_MJ_SET_INFORMATION, pDriverObject, NULL, OldSetInfoDisp);
    InterceptFunction(IRP_MJ_DIRECTORY_CONTROL, pDriverObject, NULL, OldDirCtlDisp);
    if (pDriverObject->FastIoDispatch)
    {
        pDriverObject->FastIoDispatch->FastIoRead = OldFastIoReadDisp;
        pDriverObject->FastIoDispatch->FastIoWrite = OldFastIoWriteDisp;
        pDriverObject->FastIoDispatch->FastIoQueryStandardInfo = OldFastIoQueryStandartInfoDisp;
    }
    KeLowerIrql(OldIrql);
    ObDereferenceObject(pDriverObject);
  }
}

posted on 2007-05-07 23:51 葉子 閱讀(3358) 評論(2)  編輯 收藏 引用 所屬分類: 驅(qū)動開發(fā)

Feedback

# re: 文件加密標識 -隱藏文件頭的黑客代碼 2008-07-18 20:14 文件加密

http://www.ldsafe.com
這個文件加密軟件不錯!  回復(fù)  更多評論   

# re: 文件加密標識 -隱藏文件頭的黑客代碼[未登錄] 2009-03-20 13:27 jack

感謝你的分享,但下戴編譯后,卻有錯誤,不能編譯,是否有完整代碼

謝謝  回復(fù)  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩精品福利| 亚洲一区观看| 亚洲综合色噜噜狠狠| 亚洲黑丝在线| 欧美一区二区三区免费视频| 中文在线资源观看视频网站免费不卡| 久久国产精品99国产精| 亚洲一区二区av电影| 欧美va亚洲va香蕉在线| 久久久视频精品| 国产精品一二三四区| 日韩亚洲精品在线| 亚洲精品免费一区二区三区| 久久精品国产精品亚洲综合| 欧美一级淫片aaaaaaa视频| 欧美日韩一区二区三区四区五区| 欧美国产欧美亚州国产日韩mv天天看完整 | 免费日韩精品中文字幕视频在线| 国产精品男gay被猛男狂揉视频| 亚洲精品视频免费观看| 亚洲精品乱码久久久久久蜜桃麻豆| 久久久久欧美精品| 麻豆精品国产91久久久久久| 国产一区二区三区免费不卡| 午夜日韩在线观看| 欧美在线观看一区| 国产亚洲一区二区在线观看 | 亚洲人午夜精品| 在线观看三级视频欧美| 久久婷婷久久一区二区三区| 欧美成人a∨高清免费观看| 亚洲电影在线看| 欧美成年人视频网站欧美| 欧美激情一区二区| 日韩视频在线一区| 欧美揉bbbbb揉bbbbb| 亚洲小视频在线观看| 欧美一区二区三区在线观看| 黑人操亚洲美女惩罚| 久久综合久久综合九色| 亚洲国产欧美不卡在线观看| 一本一本久久a久久精品综合妖精| 欧美午夜激情小视频| 午夜精品亚洲一区二区三区嫩草| 久久精品国产免费观看| 在线免费观看日韩欧美| 欧美日本在线看| 亚洲午夜激情| 久久综合福利| 一区二区欧美亚洲| 国产麻豆精品在线观看| 久久人人97超碰国产公开结果| 亚洲国产一区视频| 午夜精品久久久久久久男人的天堂 | 久久夜色精品亚洲噜噜国产mv| 欧美成人综合在线| 亚洲午夜在线观看视频在线| 国产一区欧美日韩| 欧美精品乱码久久久久久按摩| 亚洲视频精品| 免费看av成人| 亚洲字幕在线观看| 亚洲成色精品| 国产精品久久久久影院亚瑟 | 欧美日本一区二区高清播放视频| 亚洲午夜精品国产| 欧美国产一区二区在线观看| 亚洲欧美资源在线| 亚洲精品国偷自产在线99热| 国产欧美日韩三区| 欧美国产另类| 久久精品国产清自在天天线| 亚洲美女中文字幕| 蜜臀av性久久久久蜜臀aⅴ| 亚洲香蕉伊综合在人在线视看| 狠狠色2019综合网| 国产精品久久婷婷六月丁香| 免费视频一区| 久久国产精品久久精品国产| 一本色道久久综合亚洲精品高清 | 欧美在线观看视频在线| 99视频国产精品免费观看| 国产丝袜美腿一区二区三区| 欧美日韩午夜在线视频| 久久色在线观看| 亚洲欧美资源在线| 亚洲天天影视| 亚洲精品欧美| 亚洲国产一二三| 男男成人高潮片免费网站| 欧美一区亚洲| 午夜性色一区二区三区免费视频| 一区二区三区波多野结衣在线观看| 国产一区二区三区电影在线观看| 国产精品久久久久av免费| 欧美精品激情| 欧美成人午夜| 欧美va天堂在线| 免费日韩精品中文字幕视频在线| 久久国产一区二区| 欧美在线欧美在线| 欧美影院在线播放| 欧美一区二区三区精品电影| 亚洲欧美视频在线观看| 亚洲四色影视在线观看| 一区二区三区国产精品| 在线亚洲欧美视频| 在线综合+亚洲+欧美中文字幕| 亚洲伦理在线观看| 日韩视频三区| 亚洲视频一区在线| 亚洲视频观看| 午夜精品亚洲| 久久精品国产一区二区电影| 欧美中文日韩| 久久尤物视频| 欧美大片免费| 欧美日韩国产在线播放| 欧美日韩视频在线一区二区 | 最新国产成人av网站网址麻豆| 有坂深雪在线一区| 亚洲黄色av| 99国产精品久久久久久久| 在线午夜精品自拍| 亚洲免费视频一区二区| 性久久久久久久久久久久| 久久精品人人爽| 免费看黄裸体一级大秀欧美| 亚洲电影免费| 日韩亚洲欧美一区| 先锋影音久久| 卡通动漫国产精品| 欧美日韩中文精品| 国产欧美成人| 亚洲黄色av一区| 亚洲欧美在线看| 蜜桃久久精品乱码一区二区| 亚洲三级视频在线观看| 亚洲欧美文学| 米奇777超碰欧美日韩亚洲| 欧美日韩美女在线| 国产一区二区三区网站| 日韩视频免费观看高清在线视频| 亚洲综合三区| 欧美成在线视频| 亚洲视频在线一区| 免费久久99精品国产自在现线| 欧美日韩综合视频| 激情久久久久久久| 亚洲天堂免费观看| 欧美成人一区二区三区在线观看| 日韩午夜在线| 久久婷婷激情| 国产精品亚洲第一区在线暖暖韩国| 1769国产精品| 午夜精品久久久| 亚洲国产精品999| 欧美在线国产精品| 欧美日韩中文字幕综合视频| 激情视频一区二区三区| 亚洲一区999| 欧美高清在线一区二区| 亚洲欧美在线另类| 欧美日韩一区二区欧美激情| 一区在线观看| 久久xxxx| 一区二区欧美在线| 欧美精品在线一区二区三区| 黄色亚洲网站| 欧美在线观看视频在线| 日韩西西人体444www| 欧美mv日韩mv国产网站app| 国产日韩精品一区二区| 亚洲综合视频网| 亚洲三级国产| 欧美激情免费在线| 亚洲国产成人av| 美日韩精品免费观看视频| 亚洲女优在线| 欧美日韩理论| 99热免费精品在线观看| 亚洲电影在线| 可以看av的网站久久看| 一区二区三区在线看| 久久精品国内一区二区三区| 亚洲一区二区成人在线观看| 欧美日韩亚洲不卡| 在线一区二区视频| 亚洲精品在线二区| 欧美激情va永久在线播放| 亚洲国产一区在线| 欧美大片一区二区三区| 久久资源av| 亚洲激情六月丁香| 亚洲激情黄色| 欧美三级欧美一级| 亚洲综合色婷婷| 亚洲欧美日韩综合aⅴ视频| 国产精品无码永久免费888| 性高湖久久久久久久久|