zoukankan      html  css  js  c++  java
  • 建立一个不能打开的文件(占坑)C语言高级API调用

    建立一个不能打开的文件。当你看懂这段代码,就是一次质的改变。

    源自 windows 核心编程 扩展...

    #include <windows.h>
    
    void RaiseToDebugP()
    {
    /*
        GetCurrentProcessID 得到当前进程的ID 
        OpenProcessToken 得到进程的令牌句柄
        LookupPrivilegeValue 查询进程的权限
        AdjustTokenPrivileges 调整令牌权限
    */
        HANDLE hToken;
        HANDLE hProcess = GetCurrentProcess();
        if ( OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) )
        {
            TOKEN_PRIVILEGES tkp;
            if ( LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid) )
            {
                tkp.PrivilegeCount = 1;
                tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
                BOOL bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0) ;
            }
            CloseHandle(hToken);
        }    
    }
    
    int main()
    {
        BOOL    bRet;
        LPCTSTR lpFileName ="c:\\auplicateHandle_Test.txt";
        
        RaiseToDebugP();
        
        HANDLE hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 4);    
        // 微软公司窗口系统进程-- 4 为 system pid : 复制打开一个已经存在的进程对象
        if ( hProcess == NULL )
        {
            hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 8); // winOS-2K is 8
            if ( hProcess == NULL )
                return FALSE;
        }
        
        HANDLE hFile;
        HANDLE hTargetHandle;
        /* CreateFile是创建File这个内核对象,而不是创建物理磁盘上的“文件”。Win32 API中有一系列操作内核对象的函数,其大多命名为CreateXxx型。*/
        hFile = CreateFile( lpFileName, GENERIC_READ, 0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);    
        //0:表示不能共享 FILE_SHARE_READ FILE_SHARE_WRITE 
        
        if ( hFile == INVALID_HANDLE_VALUE )
        {
            CloseHandle( hProcess );
            return FALSE;
        }
        
        bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle, 
            0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);
        
        CloseHandle( hProcess );
        return bRet;
    }
  • 相关阅读:
    ueditor精简插件和减少初次加载文件的方法
    The Art of Mocking
    What is a mocking framework? Why is it useful?
    黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系
    What is the purpose of mock objects?
    What is Mocking?
    APPENDIX: How to apply the Apache License to your work
    开源 ≠ 免费,开源协议License详解
    如何选择开源许可证?
    五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
  • 原文地址:https://www.cnblogs.com/upendi/p/2625523.html
Copyright © 2011-2022 走看看