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;
    }
  • 相关阅读:
    java陷阱一箩筐面试
    应用MVC设计模式解决J2ME应用程序导航问题 mingjava
    我怎么了
    运营商掘宝手机游戏 无限“钱途”引人竞折腰
    网络工程师考试大纲
    java 正则
    java集合使用——LinkedList
    java集合使用——HashMap
    java集合使用——HashSet
    JAVA集合使用——基本概念
  • 原文地址:https://www.cnblogs.com/upendi/p/2625523.html
Copyright © 2011-2022 走看看