Windows核心编程笔记
HisinWang
CAD二次开发从业者。
QQ: 280338447
展开
-
NamedPipe,利用命名管道实现进程间通信
管道是一种用于在进程间共享数据的机制,其实质是一段共享内存. Windows系统为这段共享的内存设计采用数据流I/0的方式来访问. 命令管道可以在任意进程间通信,通信是双向的,任意一端都可读可写,但是在同一时间只能有一端读,一端写.Note:须包含头文件 #include <windows.h>一、服务端// 1.1创建命名管道#define BUFSIZE 4096LPCTSTR lpsz原创 2015-04-18 19:59:41 · 8829 阅读 · 0 评论 -
进程线程常用函数
// 获取当前进程句柄HANDLE WINAPI GetCurrentProcess(void);Remarks: Retrieves a pseudo handle for the current process.A pseudo handle is a special constant, currently (HANDLE)-1, that is interprete原创 2015-04-14 20:52:56 · 744 阅读 · 0 评论 -
Semaphore(信号量)
一、What is Semaphore(信号量)A semaphore object is a synchronization object that maintains a count between zero and a specified maximum value. 信号量是用于线程同步的内核对象,用来对资源进行计数.它包含: 使用计数 最大资源计数(32位) 当前资源计数(32位)原创 2015-04-14 21:13:53 · 1101 阅读 · 0 评论 -
Mailslot,利用邮槽实现进程间通信
使用邮槽通信的进程分为服务端和客户端.邮槽由服务端创建,在创建时需要指定邮槽名,创建后服务端得到邮槽的句柄. 在邮槽创建后,客户端可以通过邮槽名打开邮槽,在获得句柄后可以向邮槽写入消息.邮槽通信是单向的,只有服务端才能从邮槽中读取消息,客户端只能写入消息. 消息是先入先出的,客户端先写入的消息在服务端先被读取.邮槽除了在本机内进行进程间通信外,在主机间也可以通信. 但是在主机间进行邮槽通信,数原创 2015-04-14 21:25:26 · 1917 阅读 · 0 评论 -
PostThreadMessage发送进程间消息
函数原型BOOL PostThreadMessage( DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam);The PostThreadMessage function posts a message to the message queue of the specified thread. It ret原创 2015-04-14 21:10:11 · 4006 阅读 · 0 评论 -
CreateProcess示例
// Start the child process STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi, sizeof(pi));TCHAR szCommandLine[] = TEXT("notepad.exe");if(!CreatePr原创 2015-04-14 20:50:14 · 2257 阅读 · 0 评论 -
Mutex(互斥量)
一、What is Mutex(互斥量)互斥量是用于线程同步的内核对象,用来确保一个线程独占对一个资源的访问.互斥量包含:使用计数 线程ID 递归计数 其中: 线程ID—— 标识当前占用这个互斥量的是系统中的哪个线程 递归计数——这个线程占用该互斥量的次数 线程ID为0表示没有线程占用该互斥量,即互斥量处于触发状态.二、Rules1.如果线程ID为0(无效线程ID),那么该互斥量不为任何原创 2015-04-14 21:23:48 · 1899 阅读 · 0 评论 -
内核对象与用户对象的句柄
在系统中,对象分两类:核心对象和用户对象。 如进程对象,线程对象,文件映射 对象等就是核心对象; 而向窗口,菜单等都是用户对象。 两者是有差别的,用于标示用户对象的句柄是系统唯一的,也就是说,一个进程 完全可以对另外一个进程中的用户对象进行操作,比如两个进程间通信的方法之一, 就是发送消息。正是由于窗口是用户对象,所以句柄是系统唯一,通过FindWindow(), 得到另外一个进程的窗原创 2015-04-14 20:46:31 · 2103 阅读 · 0 评论 -
Virtual Memory Function Demo
#include <Windows.h>#include <iostream>using namespace std;int main(){ // Reserve virtual address space LPVOID lpvBase = VirtualAlloc(NULL, 64*1024, MEM_RESERVE, PAGE_READWRITE); if (lpvB原创 2015-04-18 20:04:28 · 572 阅读 · 0 评论 -
MapFileView示例
代码功能介绍: 1.创建一新文件:test.txt,并向文件写入256kb的内容2.利用内存映射文件映射从135kb开始之后的1kb内容,由于文件映射的起始地址 必须是系统分配粒度的整数倍,所以必须根据系统分配粒度对预设的起始地址 做必要的调整.3.在文件的135kb处写入内容:i love hello kitty#include <windows.h>#include <stdio.h>原创 2015-04-18 20:05:58 · 595 阅读 · 0 评论 -
创建命名共享内存
Test1.cpp#include <Windows.h>#include <iostream>using namespace std;#define BUF_SIZE 256TCHAR szName[] = TEXT("Global\\MyFileMappingObject");TCHAR szMsg[] = TEXT("Message for test file-mapping");in原创 2015-04-18 20:07:01 · 1144 阅读 · 0 评论 -
Heap,创建进程私有堆
#include <Windows.h>#include <iostream>using namespace std;int main(){ // Create a private heap HANDLE hHeapNew = HeapCreate(0, // serialized and no exception原创 2015-04-18 20:01:52 · 1002 阅读 · 0 评论 -
Pipe,利用匿名管道实现进程间通信
管道是一种用于在进程间共享数据的机制,其实质是一段共享内存. Windows系统为这段共享的内存设计采用数据流I/0的方式来访问. 命令管道可以在任意进程间通信,通信是双向的,任意一端都可读可写,但是在同一时间只能有一端读,一端写.Note:须包含头文件 #include <windows.h>一、父进程//// 1.Create pipe//HANDLE hReadPipe;HANDL原创 2015-04-14 21:29:48 · 2068 阅读 · 0 评论