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 条评论
登录 后参与评论

相关文章

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

【学习】七天搞定SAS(五):数据操作与合并

数据集操作永远是逃不掉的问题,最简单的就是两个数据集的合并——当然不是简简单单的行列添加,按照某一主键或者某些主键合并才是最常用的。在SAS中,要熟悉的就是SE...

31611
来自专栏算法修养

Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考

前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移。因为项目整体要迁移到ASP.NET Core ...

46314
来自专栏强仔仔

SpringBoot中连接MYSQL数据库,并使用JPA进行数据库的相关操作

今天给大家介绍一下如何SpringBoot中连接Mysql数据库,并使用JPA进行数据库的相关操作。 步骤一:在pom.xml文件中添加MYSQl和JPA的相关...

2436
来自专栏张善友的专栏

IBatisNet 之 自动生成主关键字

很多系统支持自动生成主关键字。一些数据库厂商预先生成(oracle),一些数据库厂商之后生成(mssal mysql).。如果你在<insert>元素中使用<s...

1978
来自专栏数据库新发现

字符集问题的初步探讨(六)-----乱码的产生

http://www.eygle.com/special/NLS_CHARACTER_SET_06.htm

812
来自专栏谈补锅

复杂sql分组查询 ( pivot)

      一个数据表里面字段有年、月、日、金额、支付方式等字段,然后现在想写个sql语句,把每一天的每种支付方式金额(支付方式有多重)排在同一行,

1563
来自专栏深度学习之tensorflow实战篇

sql语句查询到整个数据库的容量

在需要备份数据库里面的数据时,我们需要知道数据库占用了多少磁盘大小,可以通过一些sql语句查询到整个数据库的容量,也可以单独查看表所占容量。 1、要查询表...

2767
来自专栏用户2442861的专栏

MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

  在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突。

591
来自专栏小筱月

java ssm框架实现分页功能 (oracle)

LIMIT a,b : 参数 a:第 a 条数据开始查询(不包括第 a 条), 参数 b:查询 b 条数据

1622
来自专栏NewbieWeb

使用Mybatis分别在Oracle数据库和MySQL数据库中存取BLOB类型

使用Mybatis在MySQL数据库中存取BLOB类型数据比较简单唯一需要注意的是乱码的问题,但是在Oracle中存取BLOB类型数据则相对来说有一些复杂…

1171

扫码关注云+社区