• kernel32!OpenFile与kernel32! DeleteFile


    kernel32!OpenFile与ntdll!NtOpenFile

    kernel32!OpenFile并不是直接调用的ntdll!NtOpenFile,其调用的是ntdll!NtCreateFile。

    ntdll!NtOpenFile

    ntdll!NtOpenFile函数并没有声明,如果要调用的话需要GetProcAddress动态获取。

    typedef struct _IO_STATUS_BLOCK {
      union {
        NTSTATUS Status;
        PVOID    Pointer;
      };
      ULONG_PTR Information;
    } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
    
    
    typedef struct _UNICODE_STRING {
      USHORT Length;
      USHORT MaximumLength;
      PWSTR  Buffer;
    } UNICODE_STRING, *PUNICODE_STRING;
    
    typedef struct _OBJECT_ATTRIBUTES {
      ULONG           Length;
      HANDLE          RootDirectory;
      PUNICODE_STRING ObjectName;
      ULONG           Attributes;
      PVOID           SecurityDescriptor;
      PVOID           SecurityQualityOfService;
    } OBJECT_ATTRIBUTES;
    
    typedef void( __stdcall* RtlInitUnicodeStringA)(PUNICODE_STRING DestinationString, PCWSTR SourceString);
    typedef int (__stdcall *NtOpenFileA)(PHANDLE FileHandle, ACCESS_MASK DesiredAccess, OBJECT_ATTRIBUTES* ObjectAttributes, PIO_STATUS_BLOCK IoStatusBlock, ULONG ShareAccess, ULONG OpenOptions);
    
    
    UNICODE_STRING stFileName = { 0 };
    RtlInitUnicodeStringA RtlInitUnicodeString =(RtlInitUnicodeStringA) GetProcAddress(LoadLibrary(TEXT("ntdll.dll")), "RtlInitUnicodeString");
    NtOpenFileA  NtOpenFile = (NtOpenFileA)GetProcAddress(LoadLibrary(TEXT("ntdll.dll")), "NtOpenFile");
    
    • ntdll!NtOpenFile返回0xC000003B,说明给出的文件的路径错误。
    • 注意调用ntdll!NtOpenFile给出的文件名需要加上"\??\"。
    • RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)函数在使用时注意其第二个参数为宽字符。

    kernel32!DeleteFile与ntdll!NtDeleteFile

    kernel32!DeleteFile底层调用的并不是ntdll!NtDeleteFile,其调用的是ntdll!SetInformationFile(传入FileDispositionInformation/FileDispositionInformationEx参数)

    ntdll!NtDeleteFile

    ntdll!NtDeleteFile函数并没有声明,调用的话需要GetProcAddress获得函数地址进行调用

  • 相关阅读:
    SAS学习经验总结分享:篇三—SAS函数
    SAS学习经验总结分享:篇二—input语句
    微信指尖海报制作流程——中秋佳节
    SAS学习经验总结分享:篇一—数据的读取
    SAS连接MYSQL的步骤及引用数据表
    动态PPT制作
    cmake实战第一篇:初试 cmake
    由浅到深理解ROS(5)- launch启动文件的理解与编写
    由浅到深理解ROS(4)
    由浅到深理解ROS(3)-命名空间
  • 原文地址:https://www.cnblogs.com/revercc/p/15861854.html
Copyright © 2020-2023  润新知