关于LocalAlloc function,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366723(v=vs.85).aspx 关于LocalSize function,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366745(v=vs.85).aspx 关于LocalFree function,参考:https://msdn.micr…
Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc) 来源:http://blog.csdn.net/chunyexiyu/article/details/39320805 内存分配函数/内存管理API 参考: Windows MSDN http://msdn.microsoft.com/en-us/library/aa908768.aspx 附助资料: http://blog.csdn.net/susubuhui/article/de…
作者: Bruce   日期: 2012年06月03日 04:20 周日 发表评论 (0) 查看评论 --END*1--> 0 条评论 --END*2-->1,837 人阅读   程序BUG往往因为无知和无意识悄然埋下.在网络库中,我写了这么一段关闭socket的代码: view source   print? 01 void CTcpSocket::Destroy(BOOL bNotifyClosed) 02 { 03     if (m_nLinkStatus != LinkNotOpen…
作者:Kenny Kerr 翻译:Dflying Chen 原文:http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-_1320_-Part-4-_1320_-User-Account-Control.aspx 请同时参考<Windows Vista for Developers>系列. 自从Windows 2000以来,Windows开发者一直试图为用户创造一个安全稳妥的工作环境.W…
VirtualAlloc 该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页,如果用于内存分配的话,并且分配类型未指定MEM_RESET,则系统将自动设置为0 一次分配 1PAGE 以上的 RAM. 每次分配都是 PAGE 的整数倍. 你不会想为了分配 1 个 BYTE 的空间而浪费剩下的 4095 字节. OK, 你可以自己写算法, 多分配几 PAGE. 然后每次分配少量数据时就从那几 PAGE 中划分出来. KERNEL32 提供了一个解决办法, 用 HeapAlloc/Global…
1. 首先我们来看HeapAlloc: MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的 空间利用起来,从而导致分配失败),该分配方法是从一指定地址开始分配,而不像GloabalAlloc是从全局堆上分配,这个有可能是全局,也有可能是 局部.函数原型为: LPVOID HeapAlloc(     HANDLE hHeap,     DWORD dwFlags,    SIZE_T dwBytes  …
Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = System.IntPtr; using HWND = System.IntPtr; namespace Win32 { public struct OVERLAPPED { public int Internal; public int InternalHigh; public int offset; p…
catalog . 引言 . Linux平台上涉及的File IO操作 . Windows平台上涉及的File IO操作 0. 引言 本文试图讨论在windows.linux操作系统上基于C库进行文件IO操作时,可能遇到的错误,及其解决方法,主机安全攻防产品除了需要将安全攻防上的领域知识固化到程序实现上之外,还极度依赖关联系统本身.编程语言库的特性,原则上,并不是所有的安全需求都能100%地落实到程序设计中,这需要我们对操作系统.编程语言本身具有较深的理解 Relevant Link: http…
英文不好不要紧,把API函数导入打字练习类软件,即是练习打字速度,提高编程效率:也能短时间记忆API. 坚持每天打一遍,约2小时,连续打两周,会对API有很好的记忆,此方法是结合英文学习方法!以下是Window API函数例表,大家可以试试效果特别好! AbnormalTermination AbortDoc AbortPath AbortPrinter AbortProc AbortSystemShutdown AccessNtmsLibraryDoor ActivateKeyboardLay…
Delphi内存操作API函数System.IsMemoryManagerSet;System.Move;System.New;System.ReallocMem;System.ReallocMemory;System.SetMemoryManager;System.SysAllocMem;System.SysFreeMem;System.SysGetMem;System.SysReallocMem; SysUtils.DisposeStr;SysUtils.NewStr; TlHelp32.H…
FormatMessage Formats a message string. The function requires a message definition as input. The message definition can come from a buffer passed into the function. It can come from a message table resource in an already-loaded module. Or the caller…
using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = System.IntPtr; using HWND = System.IntPtr; namespace Win32 { /// <summary> /// 时间结构体 Modify by Ward /// </summary> [StructLayout(LayoutKind.Sequential)] publ…
1.Windows函数检测到错误时,会使用一种名为“线程本地存储区”的机制将相应的错误代码与“主调线程”关联到一起.这种机制使得不同的线程能独立运行,不会出现相互干扰对方的错误代码的情况. 2.GetLastError返回32位的错误代码表,每个错误有三种表示:一个消息ID.消息文本.和一个编号.函数失败后应立即调用GetLastError,否则很可能被改写. // // MessageId: ERROR_SUCCESS // // MessageText: // // The operatio…
进程间通信有很多种,windows上面比较简单的有管道通信(匿名管道及命名管道) 最近做个本机c#界面与c++服务进行通信的一个需求.简单用命名管道通信.msdn都直接有demo,详见下方参考. c++:LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\mynamedpipe"); c#:new NamedPipeClientStream("localhost", "mynamedpipe", PipeDirect…
各种开源的decompiler都不太好用,眼下最好的反编译器是IDA pro. 尽管是收费的,只是破解版非常好找. 我试过5.5版本号的,还不错. 我把windows notepad进行了反编译,多少算有点可读性: /* This file has been generated by the Hex-Rays decompiler. Copyright (c) 2009 Hex-Rays <info@hex-rays.com> Detected compiler: Visual C++ */…
经过我整理的,去掉了A和W的重复.虽然没写注释,但以后要一个一个研究.有这些WINAPI就够用了. kernel32 = 'kernel32.dll'; gdi32 = 'gdi32.dll'; user32 = 'user32.dll'; advapi32 = 'advapi32.dll'; mpr = 'mpr.dll'; version = 'version.dll'; comctl32 = 'comctl32.dll'; opengl32 = 'opengl32.dll'; wintru…
使用互斥对象: #include <windows.h> #include <iostream> #define THREADCOUNT 6 HANDLE ghMutex; DWORD WINAPI RunThreadFunction(LPVOID lpParam); int main(void) { HANDLE aThread[THREADCOUNT]; DWORD ThreadID; // 创建一个无所有者的互斥锁 ghMutex = CreateMutex( NULL, F…
转载 #include <windows.h> #include <tchar.h> #include <stdio.h> #include <strsafe.h> #pragma comment(lib, "User32.lib") void DisplayErrorBox(LPTSTR lpszFunction); int _tmain(int argc, TCHAR *argv[]) { WIN32_FIND_DATA ffd; L…
0x01 Windows 中对文件的底层操作 Windows 为了方便开发人员操作 I/O 设备(这些设备包括套接字.管道.文件.串口.目录等),对这些设备的差异进行了隐藏,所以开发人员在使用这些设备时不必关心使用的哪一种设备,只需要调用 CreateFile 这一个函数打开设备的操作即可 CreateFile 这个函数功能强大,不仅可以打开 I/O 设备.限制文件的访问.创建临时文件.定制缓存.甚至可以对 I/O 进行异步操作 0x02 同步方式访问和操作 I/O 设备 那么打开文件之后怎么操…
0x01 线程挂起与切换 对于挂起进程,挂起线程则比较简单,利用 ResumeThread 与 SuspendThread 即可,当线挂起时线程用户状态下的一切操作都会暂停 #include <Windows.h> #include <iostream> #include <process.h> using namespace std; unsigned __stdcall ThreadFun1(void *pvParam); int main(int argc, ch…
0x01 线程的创建 线程不同于进程,Windows 中的进程是拥有 '惰性' 的,本身并不执行任何代码,而执行代码的任务转交给主线程,列如使用 CreateProcess 创建一个进程打开 Cmd 程序,实际上是这个进程的主线程去执行打开 Cmd 程序的任务,也就是说创建一个进程必然有一个主线程与之对应 当然 Windows 下也可以也使用 CreateThread 创建属于当前进程或者线程的额外线程,返回值是一个线程句柄,示例程序如下图所示 #include <Windows.h> #in…
创建作业,并加以限制 HANDLE WINAPI CreateJob() { BOOL IsInJob = FALSE; DWORD ErrorCode = NULL; // 不能将已经在作业中的进程及子进程放入其他作业中,IsProcessInJob 用于判断进程是否在作业中 IsProcessInJob(GetCurrentProcess(), NULL, &IsInJob); if (IsInJob == TRUE) { // 返回错误代码 ErrorCode = GetLastError…
改变进程基址,获取进程基址 #include <Windows.h> #include <iostream> #include <strsafe.h> #include <STDLIB.H> using namespace std; #pragma comment(linker, "/BASE:0x400000") // 改变进程加载机地址 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE…
0x01 GetLastError() 函数用于获取上一个操作的错误代码 #include <Windows.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { HANDLE nFile = CreateFile(TEXT("D:\\noknow.txt"), 0, 0, NULL, OPEN_EXISTING, 0, NULL); DWORD error…
本文所有代码,均上传至github,如果你想直接看源代码,请到github下载,下载地址:https://github.com/vitalitylee/TextEditor "C语言只能写有一个黑框的命令行程序,如果要写图形界面的话,要用Java或者C#",在2009年左右,我对同学这么说. 都2021年了,说这句话导致的羞愧感,一直在我脑海徘徊. 在这里,就让我们一起用C写一个GUI应用程序,以正视听. 但是,写什么呢? 首先,这个程序不应该太复杂,不然的话没有办法在一篇文章内实现:…
三个文件分别是类定义文件pefile.h;类实现文件pefile.cpp;类调用文件petype.cpp. #ifndef PE_FILE_H #define PE_FILE_H #include "windows.h" #define ISMZHEADER (*(WORD*)File_memory == 0x5a4d) #define ISPEHEADER (*(WORD*)((BYTE*)File_memory + *(DWORD*)((BYTE*)File_memory + 0x…
工程文件petype.cpp通过调用pefile类中的函数获取文件类型. 文件类型的判断通过5个监测点完成. 监测点1:dos头的e_magic 监测点2:nt头的Signature 监测点3:文件头的Characteristics 监测点4:可选头的Magic 监测点5:可选头的Subsystem 通过监测点1和2判断是否是pe文件: 通过监测点3判断文件是否是动态库文件 通过监测点4判断文件是pe32还是pe32+还是rom映像 通过监测点5判断文件是否是0环可执行文件[驱动文件],还是3环…
引言 前面的一篇博文中总结了开发Windows Thumbnail Handler的一些经验.在公司实际项目中,需要同时针对图片和视频实现缩略图.同时还要在图片和视频文件的顶部加上LOGO.像如下这样的:       于是考虑了一下实现方案:       (1)LOGO资源采用Base64编码编译到DLL中去       (2)公司自有的图片和视频文件进行全景拼接时依赖一串参数,而这串参数需要从文件中提取.因此采用RecipeThumbnailProvider实现IInitializeWithF…
Microsoft Win32 to Microsoft .NET Framework API Map .NET Development (General) Technical Articles     Microsoft .NET Framework and Microsoft Visual Studio User Education TeamsMicrosoft Corporation January 2004 Applies to:    Microsoft® .NET Framework…
概述 VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.有些软件就是这个编出来的...另外还有VB,VF.只是使用不同语言...但是,VC++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC.ATL.COM等的知识,难度比较大.Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理:MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等…