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;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏京东技术

3D绘图小帮手WebGL入门与进阶(中)——着色器的基本编程

1674
来自专栏用户2442861的专栏

分页和分段的联系和区别

    用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实...

641
来自专栏小狼的世界

Javascript设计模式学习(三)更多的高级样式

if (hid != null && hid != undefined & hid != "") {

682
来自专栏恰同学骚年

轻量级ORM框架初探-Dapper与PetaPoco的基本使用

  EF是传统的ORM框架,也是一个比较重量级的ORM框架。这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择。

1243
来自专栏写代码的海盗

入坑第二式 golang入坑系列

史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/c...

2404
来自专栏程序员维他命

《Effective Objective-C 》干货三部曲(三):技巧篇

继上一篇《Effective Objective-C 》超级干货三部曲(二):规范篇之后,本篇即是三部曲的第三篇:技巧篇。本篇作为三部曲的最终篇,归纳讲解的是本...

1002
来自专栏灯塔大数据

技术 | Python从零开始系列连载(十八)

但是有一种情况是递归时不断调用自身,达到不了最简单的情况(例如俄罗斯套娃一层层打开到最内层的),所以一直找不到递归的出口。

843
来自专栏PPV课数据科学社区

【学习】七天搞定SAS(二):基本操作(判断、运算、基本函数)

SAS生成新变量 SAS支持基本的加减乘除,值得一提的是它的**代表指数,而不是^。 * Modify homegarden data set with ass...

3534
来自专栏前端儿

Windows下编程--模拟时钟的实现

(4)   编写显示数字时钟函数。注意要自己用矩形填充(FillRect)擦除背景。

871
来自专栏岑玉海

Spark源码系列(九)Spark SQL初体验之解析过程详解

好久没更新博客了,之前学了一些R语言和机器学习的内容,做了一些笔记,之后也会放到博客上面来给大家共享。一个月前就打算更新Spark Sql的内容了,因为一些别的...

3075

扫码关注云+社区