
window核心编程
文章平均质量分 82
pomelozero
这个作者很懒,什么都没留下…
展开
-
Window核心编程
Window核心编程第一章:错误处理FormatMessage/LocalLock\LocalFree第二章:TEXT("..") TCHAR(CHAR,WCHAR) 安全字符串函数 (必须在包含其他所有文件之后才包含StrSafe.h)_tcscpy _tcscpy_s_CrtSetReportMode(_CRT_ASSERT,0); //禁止可能由C运行时触发的所原创 2014-12-04 18:36:43 · 726 阅读 · 1 评论 -
内存映射文件
内存映射文件 (windows许多方法用此来在进程间传送数据)1.CreateFile2.CreateFileMapping //对含有SEC_LARGE_PAGES标志时用户必须具有启用内存锁定页面用户权限,否则会失败3.MapViewOfFile4. //FlushViewOfFile //确保所做的修改已经被写入到磁盘中,如果最初是FILE_MAP_COPY,将修改页交换文件原创 2015-03-12 12:59:20 · 437 阅读 · 0 评论 -
内存体系 用共享段于进程间联系
内存体系结构虚拟地址分区:空指针赋值分区,用户模式分区,64KB禁入分区,内核模式分区在默认情况下运行一个64位的应用程序,系统会保留用户模式地址空间中位于地址0x00000000'80000000(2G)之后的所有部分;这确认所有的内存分配在低2G上,这就是所谓的地址空间沙箱,可以用Yes (/LARGEADDRESSAWARE) link开关打开。dll工程会忽略此开关。当系统原创 2015-03-11 19:42:17 · 547 阅读 · 0 评论 -
线程池之I/O项 (存在疑问???)
//EnsureCleanup.h//EnsureCleanup.h/******************************************************************************Module: EnsureCleanup.hNotices: Copyright (c) 2007 Jeffrey Richter & Christophe Na转载 2015-03-09 10:34:10 · 717 阅读 · 1 评论 -
线程池之工作项,等待项,计时项 (存在疑问???)
线程池函数允许我们做:1.以异步方式调用函数 //工作项2.每隔一段时间调用一个函数 //计时项3.在内核对象触发时调用一个函数 //等待项4.在异步I/O请求完成时调用一个函数 //I/O项2.每隔一段时间调用一个函数如果两个:周期的每隔5-7秒执行一段代码,周期的每隔6-8秒执行一段代码。不用线程池将有两个线程执行,上下文切换不好,如用线程池,系统可能选择6秒间隔原创 2015-03-09 10:25:24 · 659 阅读 · 1 评论 -
异步I/O 设备内核对象,事件内核对象,可提醒I/O 接收I/O通知
CreateFileSetFilePointerExSetEndOfFileFlushFileBuffers 类似FILE_FLAG_WRITE_THROUGH功能在异步I/O请求完成之前,一定不能移动或是销毁在发出I/O请求时所使用的数据缓存和OVERLAPPED结构。BOOL WINAPI CancelIo( __in HANDLE hFile);取消同给定原创 2015-03-06 09:13:28 · 548 阅读 · 0 评论 -
I/O完成端口
I/O完成端口存在5个数据结构1.设备列表 存放:设备句柄和I/O key2.I/O完成队列 存放:I/O完成记录 先进先出3.等待线程队列 存放:等待处理I/O完成记录 后进先出4.已释放线程列表 存放:正在处理I/O完成记录的线程5.已暂停线程列表 存放:挂起的线程系统将异步I/O请求函数中请求完成后放入2中,检查4中正在运行的线程数是否低于并行数,是则唤醒3中线程。转载 2015-03-06 11:41:52 · 635 阅读 · 0 评论 -
事件,信号量,互斥量
信号量:CreateSemaphoreExWaitForSingleObject(g_semaphore,INFINITE);doing...ReleaseSemaphore(g_semaphore,1,NULL);mutexcontaining a thread ID, it will cach the caller thread id.WaitForInputIdl原创 2015-03-05 09:54:37 · 431 阅读 · 0 评论 -
内核对象用于线程同步
事件内核对象等待成功所引起的副作用,当事件对象被触发的时候,函数会检测到这一情况,这里它可以直接返回WAIT_OBJECT_0给调用线程,但是在函数返回之前,它会使事件变为非触发状态---这就是副作用,进程、线程没有这样的副作用。其他对象有不同的副作用。PluseEvent 相当于SetEvent + ResetEvent#include #include #include原创 2015-03-03 11:03:01 · 338 阅读 · 0 评论 -
方式三:使用远程线程注入DLL
HANDLE WINAPI CreateRemoteThread( __in HANDLE hProcess, __in LPSECURITY_ATTRIBUTES lpThreadAttributes, __in SIZE_T dwStackSize, __in LPTHREAD_START_ROUTINE lpStartAddress, __in原创 2015-02-27 17:12:27 · 587 阅读 · 0 评论 -
进程权限
如果用户使用管理员这样的一个被授予高特权的账户登录,那么除了与这个账户对应的安全令牌之外,还会创建一个经过筛选的住处,后者将只被授予标准用户的权限,这个筛选的令牌最后会与系统代表最终用户启动的所有进程关联。taskmgr任务管理器点show process from all users,PID将变化,因为window只允许在进程边界上进行权限提升,一时进程启动,再要求更多的权限就已经迟了。转载 2015-03-02 14:29:29 · 456 阅读 · 0 评论 -
ANSI,ASCII,UNICODE
转载:http://blog.youkuaiyun.com/zj510/article/details/38368397一直以来,编码问题都是比较令人纠结的,我自己也是,迷惑了好一段时间。首先看一下ANSI编码和ASCII 编码,用google搜到这篇文章,挺好的。http://www.differencebetween.net/technology/web-applications/differen转载 2015-03-02 10:26:47 · 439 阅读 · 0 评论 -
DLL 延时加载
1. exe加载多个dll时,初始化可能会比较慢2. exe加载老版本dll时,如果没有相应的导出函数,exe可以做相应处理后继续执行。 局限性1)导出全局变量不能延迟。2)kernel32.dll 不能延迟, LoadLibrary and GetProcAddress3) 不能在dllmain中调用延迟加载的函数。 onedll.dll project//o原创 2015-02-16 20:21:21 · 1109 阅读 · 0 评论 -
用户模式下线程同步
原子访问、调整缓存行、高级线程同步、关键段、Slim读/写锁、条件变量AcquireSRWLockExclusiveAcquireSRWLockSharedSleepConditionVariableSRW /******************************************************************************Module原创 2015-03-03 10:02:09 · 448 阅读 · 0 评论 -
线程局部存储区
尽量少使用全局变量和静态变量,尽量用栈上变量,也可用动态TLS和静态TLS数据与对象实例关联起来如SetWindowWord / SetWindowLong 将数据与窗口关联起来进程中每个线程都有TLS_MINIMUM_AVAILABLE个PVOID值的数组,一旦一个线程预订了一个索引,进程内所有正在运行或将创建的线程都不能再使用这个索引DWORD TlsAlloc();Tls原创 2015-02-17 15:47:56 · 563 阅读 · 2 评论 -
方式四:修改模块导入段来拦截API
一个模块的导入段包含一组DLL,导入段还包含一个符号表,其中列出了该模块从各DLL中导入的符号,当该模块调用一个导入函数的时候,线程实际上会先从模块的导入表中得到相应的导入函数的地址,然后再跳转到那个地址。模块的导入段中所有的字符串都是以ANSI格式保存的,有的编译器会生成多个导入段。//hook dll/***************************************原创 2015-02-28 17:20:32 · 1386 阅读 · 1 评论 -
堆的使用
堆是用来管理链表和村的最佳方式,堆始终是从页交换文件中分配。 优点:不必理会分配粒度和页面边界;缺点:分配和释放内存块的速度比其他方式慢。进程有自己的默认堆1M,/HEAP改变,系统保证默认堆是线程安全的,许多windows函数用到默认堆。额外堆:1.对组件进行保护 //使问题局部化,一个堆中问题不影响另一个堆2.更有效的内存管理3.局部访问 //把相应的数据放一个堆,一次换入原创 2015-03-12 14:02:45 · 380 阅读 · 0 评论