zoukankan      html  css  js  c++  java
  • Windows核心编程:第3章 内核对象

    Github

    https://github.com/gongluck/Windows-Core-Program.git

    //第3章 内核对象.cpp: 定义应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include "第3章 内核对象.h"
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
    	SECURITY_ATTRIBUTES sa = { 0 };
    	sa.nLength = sizeof(sa);
    	sa.lpSecurityDescriptor = nullptr;
    	sa.bInheritHandle = TRUE;//可被继承
    	HANDLE hMutex = CreateMutex(&sa, FALSE, nullptr);
    	SetHandleInformation(hMutex, HANDLE_FLAG_INHERIT, 0);//关闭可继承
    	SetHandleInformation(hMutex, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);//打开可继承
    
    	HANDLE hMutex2 = CreateMutex(nullptr, FALSE, TEXT("有名的Mutex"));
    	DWORD err = GetLastError();
    	if (err == ERROR_ALREADY_EXISTS)
    		MessageBox(NULL, TEXT("打开了已经创建的Mutex"), TEXT("CreateMutex"), MB_OK);
    	else
    		MessageBox(NULL, TEXT("创建了新的的Mutex"), TEXT("CreateMutex"), MB_OK);
    
    	HANDLE hMutex3 = OpenMutex(MUTEX_ALL_ACCESS, TRUE, TEXT("有名的Mutex"));
    
    	//灵活的(跨进程)句柄复制
    	HANDLE hMutex4 = nullptr;
    	DuplicateHandle(GetCurrentProcess(), hMutex, GetCurrentProcess(), &hMutex4, 0, FALSE, DUPLICATE_SAME_ACCESS);
    
    	CloseHandle(hMutex);//调用CloseHandle后,句柄表中的对应值就被重置了,hMutex不会指向原来的内核对象(无论此时引用计数是否为0)
    	hMutex = nullptr;//良好的习惯
    	CloseHandle(hMutex2);
    	hMutex2 = nullptr;
    	CloseHandle(hMutex3);
    	hMutex3 = nullptr;
    	CloseHandle(hMutex4);
    	hMutex4 = nullptr;
    	system("pause");
    	return 0;
    }
    
  • 相关阅读:
    LeetCode 简单等级
    破解滑动验证码
    python的日志配置
    http/https协议
    Linux通配符和关机命令
    Linux-Shell基础(变量,字符串,数组)
    tf-tensorboard的一些注意事项
    dilated convolution 详解
    论文解读《Understanding the Effective Receptive Field in Deep Convolutional Neural Networks》
    感知域的一些理解
  • 原文地址:https://www.cnblogs.com/gongluck/p/9156165.html
Copyright © 2011-2022 走看看