YiMiTuMi

使我进步的不是谦虚,而是别人羡慕我时我的那份骄傲!

获取磁盘容量

c++

获取磁盘容量 保存磁盘容量结构体: //磁盘信息 typedef struct _DISK_DATA_INFO { wstring strDiskPath; //磁盘路径 DWORD64 dwDiskTotalCapacity; //磁盘总容量 (字节) DWORD64 dwDiskUseCapacity;//磁盘使用容量 (字节) DWORD64 dwDi...

修改控件文本颜色

c++

修改控件文本颜色 StaticText测试可以,其余没有测试。 定义: afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); 事件: ON_WM_CTLCOLOR() 实现: HBRUSH CxxxDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColo...

事件等待

c++

原子操作 全局变量: DWORD dwVal = 0; 线程中的代码: dwVab++; 这行代码是不安全的,因为对应的汇编代码为(单核多核都不安全): mov eax, [0x12345678] add eax, 1 mov [0x12345678], eax 当代码在执行最后的mov前发生线程切换就会导致最后dwVab返回的值出现错误,并不安全,因为线程切换会发生...

PE-基址重定位与重定位表

c++

基址重定位 当链接器生成一个PE文件时,会假设这个文件在执行时被装载到默认的基地址处,并把 code 和 data 的相关地址都写入PE文件。如果载入时将默认的值作为基地址载入,则不需要重定位。但是,如果PE文件被装载到虚拟内存的另一个地址中,连接器登记的那个地址就是错误的,这时就需要用重定位表来调整。在PE文件中,重定位表往往单独作为一块,用“.reloc”表示。 PE格式不参考外部D...

基于NTFS磁盘快速查找

c++

基于NTFS磁盘快速查找 关于NTFS查找的原理建议自行百度查找,这里写了一个类进行查找,一个盘一个线程。 后面可以将类写成一个单例,然后将除了线程外的函数写到类里。(这里懒了) TraverSalFile.h TraverSalFile.h类的头文件: #include <Windows.h> #include <WinIoCtl.h> #include...

插入、调用APC函数详解

c++

APC插入过程分析 APC不论从3环插入还是从0环插入都会调用内核层函数: QueueUserAPC(Kernel32.dll) ↓ ↓ → 用户层调用 NtQueueApcThread(ntosker.exe) ↑ ↓ KeInitializeApc(分配空间,初始化KAPC结构体) ↓ ↓ ...

APC的本质

c++

APC的本质 线程是不能被“杀掉”、“挂起”、“恢复”的,线程在执行的时候自己占据着CPU,别人是不可能控制它的。 例如:如果线程不调用API,屏蔽中断,并保证代码不会出现异常,线程将永久占用CPU,所以说线程如果想停止,一定时自己执行代码把自己干掉,不存在被别的线程干掉的情况。 如果想改变一个线程的行为,操作系统给线程提供了一个函数,让线程自己去调用,这个函数就是APC(Asyncr...

管道异步通信

c++

管道异步通信 管道异步通信,我们通过在 CreateFile 和 CreateNamedPipe 中添加 FILE_FLAG_OVERLAPPED 来实现管道的异步通信也叫重叠I/O。 重叠I/o的使用:当你调用调用ReadFile和WriteFile时,结果立马返回,这样就可以去执行其他的代码,同时可以使用WaitForSingleObject和GetOverlappedResult来...

PE文件格式

c++

PE文件格式 建议自行百度。 VirtualAddress 转 PionterToRawData 1. 先判断是否在文件头中,文件头不会被拉伸 2. 判断那个节表: x > VirtualAddress x < VirtualAddress + misc.virtualSize 3. 找到对应节表后计算差值y: x - VirtualAddress = ...

句柄表

c++

句柄表 HWND和HANDLE不同,HWND与界面有关,下面只关心HANDLE句柄。 句柄表分为全局句柄表,和每个进程一个的自己的句柄表为私有句柄表。 当一个进程创建或者打开一个内核对象时,将获得一个句柄,通过这个句柄可以访问内核对象。 例: HANDLE g_hMutex = ::CreateMutex(NULL, FALSE, "XYZ"); //创建一个有名或无名的互斥量对象...