![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Windows
文章平均质量分 80
Ginvar
这个作者很懒,什么都没留下…
展开
-
windows进程间通信的4种基本方法
一 利用剪贴板进行进程间通信void CClipboardDlg::OnBtnSend() {// TODO: Add your control notification handler code hereif(OpenClipboard()) //打开剪贴板{EmptyClipboard(); //释放剪贴板中数据的句柄并分配剪贴板所有权给当前窗口 CStr原创 2013-08-19 18:25:27 · 679 阅读 · 0 评论 -
动态链接库与静态链接库的区别
原文地址:动态链接库与静态链接库的区别(转载)作者:牛妞静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE独立的 DLL文件。静态链接库和动态链接库的另外一个区别在于静态转载 2013-08-19 18:27:11 · 465 阅读 · 0 评论 -
Windows内存管理与结构体MEMORY_BASIC_INFORMATION
原文地址:Windows内存管理与结构体MEMORY_BASIC_INFORMATION作者:Jess23基于32位Windows,摘自http://blog.csdn.net/yeming81/archive/2008/01/16/2046193.aspx 1. 进程地址空间 软件的进程运行于32位系统上,其寻址位也是32位,能表示的空间是232=4G,范围从0x0000 0000~0x转载 2013-08-19 18:27:05 · 3934 阅读 · 0 评论 -
DLL注入
每个进程都有独立的地址空间,违规访问可能会导致内存访问违规,但是有时候我们需要打破进程的界限,访问另一个进程的地址空间,这里就可以用到我们的DLL注入技术了,将我们的DLL插入到另一个进程的地址空间,一旦你的DLL进入另一个进程的地址空间,你就可以对该进程为所欲为了。。。下面介绍几种DLL注入技术:利用注册表注入DLL在注册表中有一个关键字AppInit_DLLs,它的路径是:原创 2013-08-21 01:30:41 · 1113 阅读 · 0 评论 -
Hook API(挂钩API)技术
Hook API,简单说,就是给API函数挂钩,将本应该调用的API函数拦截,使其转而调用我们自己的函数。这里,我主要介绍如何利用IAT挂钩来实现API拦截。在我们启动目标程序时,操作系统负责为目标程序创建虚拟地址空间,并将这个可执行模块(就是目标程序)加载到地址空间中去,接下来,系统会将目标程序所需要的DLL文件映射到地址空间。我们将需要映射到地址空间的目标程序及所需DLL统称为模块(Mod原创 2013-08-25 00:13:00 · 2603 阅读 · 0 评论 -
Windows下内存映射文件的工作原理及使用方法
一、引言 WIN32 API为我们提供了一种进行文件操作的高效途径,即内存映射文件。内存映射文件允许我们在WIN32进程的虚拟地址空间中保留一段内存区域,把目标文件映射到这段虚拟内存之中。我们可以用存取内存数据的方式直接操作文件中的数据,就好像这些数据放在内存中一样。而实际上,我们并没有、也不需要调用API函数来读写文件,更不需要自己提供任何缓冲算法,操作系统将会为我们完成这些工作。使用内存转载 2013-09-21 21:40:14 · 1312 阅读 · 0 评论 -
GBK到UTF8编码转换的C++实现
std::string GBKToUTF8(const std::string& strGBK){ WCHAR * str1; int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0); str1 = new WCHAR[n]; MultiByteToWideChar(CP_ACP, 0, strGBK.c_s原创 2013-12-02 22:20:50 · 938 阅读 · 0 评论 -
编写一个垃圾回收器
每当我倍感压力以及有很多事情要做的时候,我总是有这样一种反常的反应,那就是希望做一些其他的事情来摆脱这种状况。通常情况下,这些事情都是些我能够编写并实现的独立的小程序。一天早上,我几乎要被一堆事情给整疯了——我得写我那本《游戏编程模式》、处理一些工作上的事情、还要准备一场Strange Loop的演讲,然后这时我突然想到:“我该写一个垃圾收集器了”。是的,我知道那一刻让我看上去转载 2013-12-30 14:39:52 · 976 阅读 · 0 评论 -
哈夫曼编解码的C++实现
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525转载 2014-02-13 14:02:11 · 839 阅读 · 0 评论 -
LZW编解码算法(C实现)
代码中加入了自己的一些注释,以便于阅读理解。程序由五个模块组成lzw.h 定义了一些基本的数据结构,常量,还有变量的初始化等。#ifndef __LZW_H__#define __LZW_H__//------------------------------------------------------------------------------转载 2014-02-17 15:02:53 · 3111 阅读 · 0 评论 -
windows下libcurl的使用
使用的是curl-7.26.0版本,这个版本下的根目录下有.dsw文件,个人只是觉得使用编译方便点,其他版本未深究解压打开根目录下的curlxxx.dsw选择libcurl,单编译这个release=======================使用的时候 指定VC路径include到目录里面的indcludelib库指到刚编译转载 2016-04-08 18:36:53 · 1274 阅读 · 0 评论 -
谨慎使用DLL_THREAD_ATTACH,以及利用DLL_THREAD_ATTACH来阻止远程线程的创建执行
DLL_THREAD_ATTACH的调用时机当进程创建一个线程的的时候,系统会检查当前映射到该进程的地址空间中的所有DLL文件映像,并用DLL_THREAD_ATTACH来调用每个DLL的DllMain函数,新创建的线程负责执行所有DLL的DllMain函数中的代码。系统不会让进程的主线程调用DLL_THREAD_ATTACH的值来调用DllMain函数。此时新线程已经被创建但尚未原创 2013-08-19 20:32:03 · 7714 阅读 · 2 评论 -
跨进程边界共享内核对象
在很多时候,不同进程中运行的线程需要共享内核对象,比如一些同步操作。三种不同机制来允许进程共享内核对象:① 使用对象句柄继承;② 为对象命名;③ 复制对象句柄。(1) 使用对象句柄继承只有进程之间存在父子关系的时候才可以使用对象句柄继承。首先要创建一个可继承的句柄,父进程必须分配并初始化一个SECURITY_ATTRIBUTES结构,并将该结构的地址传给具体的Create函原创 2013-08-19 18:25:46 · 894 阅读 · 0 评论 -
用户模式的线程同步
在以下两种基本情况下,线程之间需要相互通信: 需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性;一个线程需要通知其它线程某项任务已经完成。1.原子访问:Interlocked系列函数 所谓原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源。 我们需要有一种方法能够保证对一个值的递增操作时原子操作——也就是说,不会被打断。原创 2013-08-19 18:25:35 · 591 阅读 · 0 评论 -
CreateProcess函数
函数原型: BOOLCreateProcess( PCTSTR pszApplicationName, PTSTR pszCommandLine, PSECURITY_ATTRIBUTES psaProcess, PSECURITY_ATTRIBUTES psaThread, BOOL bInheriHandles,原创 2013-08-19 18:25:44 · 628 阅读 · 0 评论 -
安全函数(后缀为_s)的参数检查和…
所有安全(后缀为_s)函数的首要任务是验证传给它们的参数值。要检查的项目包括指针不为NULL,整数在有效范围内,枚举值是有效的,而且缓冲区足以容纳结果数据。如果当中任何一项失败了,函数都会设置局部于线程的C运行时变量errno。然后,并返回一个errno_t值来指出成功或失败。然而这些函数并不实际返回。相反,如果是一次调试版(debug)构建,它会显示一个对用户不太友好的DebugAsserti原创 2013-08-19 18:25:48 · 1675 阅读 · 0 评论 -
Windows全局钩子dll(键盘)
// dllHookkb.cpp : Defines the entrypoint for the DLL application.//#include "stdafx.h"#include "dllHookkb.h"#ifdef _MANAGED#pragma managed(push, off)#endif#pragmadata_seg("YCIShared2010")H原创 2013-08-19 18:27:07 · 1457 阅读 · 0 评论 -
作业
windows提供了一个作业内核对象,它允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么,最好将作业对象想象成一个进程容器。但是,创建只包含一个进程的作业同样非常有用,因为这样可以对进程施加平时不能施加的限制。如果一个进程已与一个作业关联,就无法将当前进程或者它的任何子进程从作业中去除。这个安全特性可以确保进程无法摆脱对它施加的限制。可以利用函数IsProcessInJob验证当原创 2013-08-19 18:25:31 · 628 阅读 · 0 评论 -
Windows的消息分流器
一重:LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){switch(msg){ case WM_CREATE: return HANDLE_WM_CREATE(hwnd, wParam, lParam, Cls_OnCreate); case WM_PA原创 2013-08-19 18:25:40 · 665 阅读 · 0 评论 -
提升进程权限
GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄 LookupPrivilegeValue 查询进程的权限 AdjustTokenPrivileges 判断令牌权限 要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeD原创 2013-08-19 18:25:42 · 619 阅读 · 0 评论 -
邮槽通信
邮槽定义邮槽(Mailslot)也称为邮件槽,其是 Windows提供的一种用来实现进程间通信的手段,其提供的是基于不可靠的,并且是单向数据传输的服务。邮件槽只支持单向数据传输,也就是服务器只能接收数据,而客户端只能发送数据,何为服务端?何为客户端?服务端就是创建邮槽的那一端,而客户端就是已存在的邮件槽的那一端。还有需要提及的一点是,客户端在使用邮槽发送数据的时候只有当数原创 2013-08-19 18:25:29 · 1175 阅读 · 0 评论 -
内核对象的线程同步
1、 用户方式的线程同步与内核对象的线程同步:用户方式:速度快是其优点,但是也有局限性。如互锁函数只能在单值上运行,无法使线程进入等待状态。虽然可以使用关键代码段使线程进入等待状态,但是这样又会容易陷入死锁,因为在等待进入关键代码段时无法设定超时值。内核对象方式:唯一的缺点就是速度慢,调用成本比较高。对于线程同步来说,内核对象中的每种对象都可以说处于已通知或者未通知状态中。线程在运原创 2013-08-19 18:25:33 · 470 阅读 · 0 评论 -
伪句柄
windows提供了一些函数,使线程能够很容易引用它的进程或线程的内核对象。 HANDLE GetCurrentProcess(); HANDLEGetCurrentThread(); 上面这两个函数都能返回调用线程的进程的伪句柄或线程内核对象的伪句柄。这些函数并不在创建进程的句柄表中创建新句柄。还有,调用这些函数对进程或线程内核对象的使用计数没有任何影响。如果调用原创 2013-08-19 18:25:37 · 575 阅读 · 0 评论 -
内存修改器原理
BOOLWINAPIReadProcessMemory( HANDLEhProcess, //待读进程的句柄 LPCVOIDlpBaseAddress, //目标进程中待读内存的起始地址 LPVOIDlpBuffer, //用来读取数据的缓冲区原创 2013-08-19 18:27:09 · 1447 阅读 · 0 评论 -
windows下zlib库的编译与使用
一、zlib库的编译 首先要下载这个库,这个谷歌和百度也都可以找得到的。我下载的是zlib-1.2.5,下载完解压出来即可。下边就开始编译吧。(包括动态库和静态库两种)1. 首先开启VS2010的Command Prompt (32bit),也就是命令提示窗口。2. 进入到zlib-1.2.5/contrib/masmx86目录,执行bld_ml32.bat。(同理,转载 2016-04-21 12:15:30 · 19752 阅读 · 1 评论