2024年9月createmutex函数参数(英语/计算机英语)
⑴createmutex函数参数(英语/计算机英语
⑵程序中当前实例的句柄程序中上一实例的句柄参数(变量通常为空假如你需要检测另一个实例是否已创建,通过调用CreateMutex函数创建一个唯一命名的互斥锁(mutex。该函数在创建过程中会忽略是否存在互斥,但GetLastError函数会返回ERROR_ALREADY_EXISTS的错误说明。这就表明另一个实例已经存在于你的程序中,因为已存在的实例造成了互斥。lpCmdLine指向空终止字符串的指针,用于说明(specifying程序应用控制命令行,但不包括主程序名称。调用GetmandLine函数来检索所有的控制命令行语句。没有上下文只能逐字翻译成这样,专业术语尽力贴近计算机专业了,希望对你有用。
⑶CreateMutex()、OpenMutex()和CloseHandle()如何配对
⑷需要的HANDLEhMutex=CreateMutex(...“mymutex“);HANDLEhMutex=OpenMutex(..“mymutex“);CloseHandle(hMutex);CloseHandle(hMutex);
⑸CreateMutex()函数是什么意思
⑹CreateMutex()CreateSemaphore()是系统提供的API,包含Windows.h就可以。是应用在同步的处理中。冒号是域操作符,这里的意思是访问系统的APISleep,目的是区别调用,比如你也实现了Sleep,那么此处加冒号是调用系统的Sleep
⑺如何实现一个应用程序只能打开一个进程
⑻在开发过程中可以使用互斥对象控制应用程序只能打开一个进程。避免误操作或其他原因造成因同时打开多个应用程序而使数据录入或统计错误。本例是在工程单元中打开互斥对象,如果句柄为,说明互斥对象不存在,创建互斥对象并运行程序,如果句柄大于,说明存在互斥对象,程序直接退出,主要代码如下:ifOpenMutex(MUTEX_ALL_AESS,True,’Mutex’)=thenbeginCreateMutex(nil,True,’Mutex’);Application.Initialize;Application.CreateForm(TForm,Form);Application.Run;CloseHandle(OpenMutex(MUTEX_ALL_AESS,True,’Mutex’));end;使用CreateMutex函数创建互斥对象。语法格式如下:HandleCreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,BOOLbInitialOwner,LPCTSTRlpName);参数说明lpMutexAttributes:安全属性。BInitialOwner:指定互斥对象是否拥有所有者标识。值为true时,程序创建的CreateProcess方法能够继承互斥对象句柄。LpName:创建的互斥对象名称。Return_Value:返回创建的互斥对象句柄。使用OpenMutex函数打开互斥对象。语法格式如下:HandleOpenMutex(DWORDdwDesiredAess,//aessflagBOOLbInheritHandle,//inheritflagLPCTSTRlpName//pointertomutex-objectname);参数说明dwDesiredAess:访问标识。BInheritHandle:继承标识。LpName:互斥对象名称
⑼如何破解CreateMutex和OpenMutex函数
⑽第一种方法,在程序没有执行CreateMutex和OpenMutex这两个api之前Hook,一般都是主线程开始的代码,如果用一个程序检查该程序运行然后hook,根本就来不及Hook,因为Hook了的时候,该程序早就把这个函数执行了,除非要hookwindows系统的程序装载器,当装载器把程序的代码映射到内存后,挂起该进程,然后hook第二种方法,修改该程序的exe文件,把里面的导入表中这个api的dll文件名修改成你自己写的dll文件名,然后在自己写个dll,改程序调用你写的dll中的api,随便想返回给他什么值自己看着办。第三种方法,也是最好的方法,下载一个反汇编工具,找到使用这个api的地方,肯定有个判断语句,判断是否多开,正常的是有多开,就结束程序,现在修改那个判断的汇编指令即可。
⑾浅谈linux和windows的线程机制的区别
⑿-转载自fychit创意空间早前想写写linux线程编程windows线程编程每写知道哪写起自知道东西都写面我谈谈linux线程及线程同步并windows线程进行比较看看间相同点同其实始我搞windows编程包括windows编程windows驱包括usb驱ndis驱,pci驱驱等等同条龙服务做windows应用程序发面慢慢我linux发产比较深兴趣转搞linux发接我写些博客主要写linux编程windows编程区别吧现想写linuxusb驱windowsusb驱发区别些都等我linux线程windows线程讲解完我再写篇usb驱谈谈windowslinuxusb驱东东言归传始线程首先我讲讲要采用线程编程其实并所程序都必须采用线程些候采用线程性能没单线程所我要搞清楚候采用线程采用线程处:()线程彼间采用相同址空间共享部数据进程相比代价比较节俭进程启新进程必须配给独立址空间需要数据表维护代码段数据段堆栈段等等()线程进程相比明显优点线程间通信同进程说具独立数据空间要进行数据传递能通通信式进行种式仅费且便于线程间直接共享数据比简单式共享全局变量共享全部变量要注意哦呵呵必须注意同步知道呵呵()cpu情况同线程运行同cpu完全并行反我觉种情况采用线程比较理想比说要做任务步骤提高工作效率线程技术辟线程第线程做第步工作第线程做第步工作候要注意同步第步做完才能做第步工作我采用同步技术进行线程间通信针种情况我首先讲讲线程间通信windows平台线程间通信采用主要:()共享全局变量,种容易想呵呵首先讲讲吧比说吧面问题第步要向第步传递收据我间共享全局变量让两线程间传递数据主要考虑同步面线程数据进行操作候第线程改变数据内容同步保护严重知道种情况读脏数据种情况我容易想同步设置boolflag比说第线程没用完数据前第线程能写入线程所需间相同候达效率同步比较麻烦咱几缓冲区进行操作像产者消费者线程直跑由于间致缓冲区迟早溢种情况要考虑让数据写入让数据覆盖掉数据候要具体问题具体析打住呵呵用bool变量控制同步linuxwindows既讲道再讲讲其同步同针面问题共享全局变量同步问题除采用bool变量外容易想互斥量呵呵传说加锁windows加锁linux加锁类似采用互斥量进行同步要想进入段代码先必须获互斥量linux互斥量函数:windows互斥量函数:createmutex创建互斥量获互斥量waitforsingleobject函数用完释放互斥量ReleaseMutex(hMutex)减候内核才释放其象面windows与互斥几函数原型HANDLEWINAPICreateMutex(__inLPSECURITY_ATTRIBUTESlpMutexAttributes,__inBOOLbInitialOwner,__inLPCTSTRlpName);用创建名或名互斥量象第参数指向结构体SECURITY_ATTRIBUTES般设null;第二参数指函数应应状态FALSE前拥者创建互斥第三参数指明否名互斥象名用nullDWORDWINAPIWaitForSingleObject(__inHANDLEhHandle,__inDWORDdwMilliseconds);第创建互斥象句柄第二表示少间返设宏INFINITE则返直用户自定义返于linux操作系统互斥类似函数同罢linux互斥相关几函数要闪亮登场pthread_mutex_init函数:初始化互斥锁;pthread_mutex_destroy函数:注销互斥锁;pthread_mutex_lock函数:加锁功阻塞等待;pthread_mutex_unlock函数:解锁;pthread_mutex_trylock函数:测试加锁功立即返错误码EBUSY;至于些函数用google搜呵呵讲windows用保护数据线程同步式临界区临界区互斥类似间区别临界区速度快能用同步同进程内线程临界区获取释放函数:EnterCriticalSection()进入临界区;LeaveCriticalSection()离临界区于线程共享内存东东讲()采用消息机制进行线程通信同步windows面消息机制函数用postmessageLinux消息机制我用较少说谁熟悉告诉我呵呵()windows另外种线程通信事件信号量同针我始举例线程同步间传递信息采用事件(Event)或信号量(Semaphore),比第线程完产数据必须告诉第线程已经数据准备取走第线程数据取走呵呵采用消息机制第线程准备数据直接postmessage给第线程按理说采用postmessage线程搞定问题呵呵重点省略讲于linux类似条件变量呵呵windowslinux同要特别讲讲才行于windows采用事件信号量同步候都使用waitforsingleobject进行等待函数第参数句柄Event句柄或Semaphore句柄第参数等待延迟终等久单位ms参数INFINITE限等待释放信号量函数ReleaseSemaphore(;释放事件函数SetEvent使用些东西都要初始化讲Msdn搜神马都呵呵神马都浮云于linux操作系统采用条件变量实现类似功能Linux条件变量般都互斥锁起使用主要函数:pthread_mutex_lock,pthread_mutex_unlock,pthread_cond_initpthread_cond_signalpthread_cond_waitpthread_cond_timewait
⒀c++求助:WinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow)
⒁hInstance:应用程序当前实例的句柄。hPrevlnstance:应用程序的先前实例的句柄。对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。对于一个位程序,该参数总为NULL。如果需要检测另外一个实例是否已经存在,则使用CreateMutex函数创建一个独一无二的名字。即使互斥名已经存在,CreateMutex函数也是成功的,但是GetLastError函数将返回ERROR_ALREADY_EXISTS,这就表明应用程序有另外一个实例存在,因为它首先创建了互斥名。lpCmdLine:指向应用程序命令行的字符串的指针,不包括执行文件名。获得整个命令行,参看GetmandLine。第三个参数lpCmdLine是一个以空终止的字符串,指定传递给应用程序的命令行参数。例如:在D盘下有一个sunxin.txt文件,当我们用鼠标双击这个文件时将启动记事本程序(notepad.exe,此时系统会将D:sunxin.txt作为命令行参数传递给记事本程序的WinMain函数,记事本程序在得到这个文件的全路径名后,就在窗口中显示该文件的内容。要在VC++开发环境中向应用程序传递参数,可以单击菜单【Project】→【Settings】,选择“Debug”选项卡,在“Programarguments”框中输入你想传递给应用程序的参数。nCmdShow:指明窗口如何显示。该参数可以是下列值之一:SW_HIDE:隐藏窗口并且激活另外一个窗口。SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同。SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。SW_SHOWMAXIMIZED:激活窗口并且将其最大化。SW_SHOWMINIMIZED:激活窗口并将其目标化。SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同。
⒂win有无办法多开某个应用比如某个网络游戏
⒃有多建立几个用户一个用户开一个如果你开网游的话建议弄个游戏多开器第一,进程隐藏部分游戏通过探测游戏客户端进程是否已经存在来防止重复打开,如游戏:英雄美人游戏多开的办法为启动一个游戏客户端后,将该游戏的进程隐藏,只保留一个或多个。第二,窗口标题修改(使用FindWindowAPI函数)部分游戏通过探测游戏客户端的窗口是否已经存在来防止重复打开。游戏多开的办法为将游戏的窗口修改为任意字符。第三,端口隐藏部分游戏通过默认打开TCP或者UDP端口监听,开第二个游戏的时候会打开端口失败从而判断游戏是否多开。游戏多开的方法为此类需要采用stat–a–n–o命令查看端口即可实现游戏多开。第四,多个游戏目录部分游戏通过独占文件访问来防止重复打开。游戏多开的方法为复制游戏客户端到另外的文件夹,在另外的文件夹打开即可。第五,多个操作系统账号(仅限XP系统)部分游戏通过限制一个用户只能打开一个游戏来防止重复打开。游戏多开的方法为在系统账号里面多建立账号,一个游戏使用一个账号。方法如下:、打开控制面版→用户帐户→创建一个新帐户→输入新帐户名(下一步)→创建帐户;、然后到桌面的游戏快捷图标上右键到这个选项勾上开第个程序的时候记得用你新建的用户进就可以了,省的老去切换用户了。第六,互斥体。部分游戏通过互斥对象/信号量/事件等线程同步对象来确定程序是否已经运行。最常用的函数如:CreateMutexA。、首先创建一个互斥体,CreateMutex函数,第一个参数可以设置为NULL,第二个参数必须设置为false,第三个参数表示互斥体的名称,这个名称最好有一些特殊标识以防止与其他应用程序冲突,比如程序名+时间。、使用GetLastError()函数判断错误信息是否为ERROR_ALREADY_EXISTS,如果是,则表示程序已经启动。游戏多开的方法有二种,一为发现互斥体,然后关闭互斥体即可实现多开。二为APIHOOK,接收到错误信息时,加重置命令(置错误码=)即可。QQ游戏,天龙八部==最常见的类型
⒄v程序多开器原理是:利用互斥体。v程序多开器通过互斥对象、信号量、事件等线程同步对象来确定程序是否已经运行。最常用的函数如:CreateMutexA。
⒅v程序多开器创建一个互斥体,CreateMutex函数,第一个参数可以设置为NULL,第二个参数必须设置为false,第三个参数表示互斥体的名称,这个名称最好有一些特殊标识以防止与其他应用程序冲突,比如程序名+时间。
⒆使用GetLastError()函数判断错误信息是否为ERROR_ALREADY_EXISTS如果是,则表示程序已经启动。
⒇多开的方法有二种,一为发现互斥体,然后关闭互斥体即可实现多开。二为APIHOOK,接收到错误信息时,加重置命令(置错误码=)即可。
⒈共享节法突破多开的方法是:
⒉思路是共享节中的某个数据用来判断是否运行过实例,我们可以捕捉访问该段的代码。
⒊OD载入ALT+M显示内存,这里可以看到许多段,选中Shared段右键在访问上设置中断,对整个内存块设置该类型断点,这个断点是一次性断点,当所在段被读取或执行时就中断,中断发生后,断点将被删除。F运行程序来到下面。
⒋FECD》CMPDWORDPTRDS:,FEEJNZSHORT共享节单.FE。
⒌转到FE这个地址我们看到有ExitProcess,可以断定这两句代码就是拿出共享段中得某个数据与比较来判断是否有实例运行,我们将其JNZNOP掉,让其永远不会跳转,保存修改,成功多开。
⒍CMUT我没听过,你说的是cmutex吗?互斥(Mutex是一种用途非常广泛的内核对象。能够保证多个线程对同一共享资源的互斥访问。同临界区有些类似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。与其他几种内核对象不同,互斥对象在操作系统中拥有特殊代码,并由操作系统来管理,操作系统甚至还允许其进行一些其他内核对象所不能进行的非常规操作。只有拥有互斥对象并得以进入到共享资源,而其他线程则会被排斥在外。当此线程处理完共享资源并准备离开此区域时将把其所拥有的互斥对象交出,其他任何一个试图访问此资源的线程都有机会得到此互斥对象。以互斥内核对象来保持线程同步可能用到的函数主要有CreateMutex(、OpenMutex(、ReleaseMutex(、WaitForSingleObject(和WaitForMultipleObjects(等。在使用互斥对象前,首先要通过CreateMutex(或OpenMutex(创建或打开一个互斥对象。CreateMutex(函数原型为:HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,//安全属性指针BOOLbInitialOwner,//初始拥有者LPCTSTRlpName//互斥对象名);参数bInitialOwner主要用来控制互斥对象的初始状态。一般多将其设置为FALSE,以表明互斥对象在创建时并没有为任何线程所占有。如果在创建互斥对象时指定了对象名,那么可以在本进程其他地方或是在其他进程通过OpenMutex(函数得到此互斥对象的句柄。OpenMutex(函数原型为:HANDLEOpenMutex(DWORDdwDesiredAess,//访问标志BOOLbInheritHandle,//继承标志LPCTSTRlpName//互斥对象名);当目前对资源具有访问权的线程不再需要访问此资源而要离开时,必须通过ReleaseMutex(函数来释放其拥有的互斥对象,其函数原型为:BOOLReleaseMutex(HANDLEhMutex);其唯一的参数hMutex为待释放的互斥对象句柄。至于WaitForSingleObject(和WaitForMultipleObjects(等待函数在互斥对象保持线程同步中所起的作用与在其他内核对象中的作用是基本一致的,也是等待互斥内核对象的通知。但是这里需要特别指出的是:在互斥对象通知引起调用等待函数返回时,等待函数的返回值不再是通常的WAIT_OBJECT_(对于WaitForSingleObject(函数或是在WAIT_OBJECT_到WAIT_OBJECT_+nCount-之间的一个值(对于WaitForMultipleObjects(函数,而是将返回一个WAIT_ABANDONED_(对于WaitForSingleObject(函数或是在WAIT_ABANDONED_到WAIT_ABANDONED_+nCount-之间的一个值(对于WaitForMultipleObjects(函数。以此来表明线程正在等待的互斥对象由另外一个线程所拥有,而此线程却在使用完共享资源前就已经终止。除此之外,使用互斥对象的方法在等待线程的可调度性上同使用其他几种内核对象的方法也有所不同,其他内核对象在没有得到通知时,受调用等待函数的作用,线程将会挂起,同时失去可调度性,而使用互斥的方法却可以在等待的同时仍具有可调度性,这也正是互斥对象所能完成的非常规操作之一。在编写程序时,互斥对象多用在对那些为多个线程所访问的内存块的保护上,可以确保任何线程在处理此内存块时都对其拥有可靠的独占访问权。下面给出的示例代码即通过互斥内核对象hMutex对共享内存快g_cArray进行线程的独占访问保护。下面给出实现代码清单://互斥对象HANDLEhMutex=NULL;charg_cArray;UINTThreadProc(LPVOIDpParam){//等待互斥对象通知WaitForSingleObject(hMutex,INFINITE);//对共享资源进行写入操作for(inti=;i《;i++){g_cArray=’a’;Sleep();}//释放互斥对象ReleaseMutex(hMutex);return;}UINTThreadProc(LPVOIDpParam){//等待互斥对象通知WaitForSingleObject(hMutex,INFINITE);//对共享资源进行写入操作for(inti=;i《;i++){g_cArray=’b’;Sleep();}//释放互斥对象ReleaseMutex(hMutex);return;}……voidCSampleView::OnMutex(){//创建互斥对象hMutex=CreateMutex(NULL,FALSE,NULL);//启动线程AfxBeginThread(ThreadProc,NULL);AfxBeginThread(ThreadProc,NULL);//等待计算完毕Sleep();//报告计算结果CStringsResult=CString(g_cArray);AfxMessageBox(sResult);}互斥对象在MFC中通过CMutex类进行表述。使用CMutex类的方法非常简单,在构造CMutex类对象的同时可以指明待查询的互斥对象的名字,在构造函数返回后即可访问此互斥变量。CMutex类也是只含有构造函数这唯一的成员函数,当完成对互斥对象保护资源的访问后,可通过调用从父类CSyncObject继承的UnLock(函数完成对互斥对象的释放。CMutex类构造函数原型为:CMutex(BOOLbInitiallyOwn=FALSE,LPCTSTRlpszName=NULL,LPSECURITY_ATTRIBUTESlpsaAttribute=NULL);该类的适用范围和实现原理与API方式创建的互斥内核对象是完全类似的,但要简洁的多,下面给出就是对前面的示例代码经CMutex类改写后的程序实现清单://MFC互斥类对象CMutexg_clsMutex(FALSE,NULL);UINTThreadProc(LPVOIDpParam){//等待互斥对象通知g_clsMutex.Lock();//对共享资源进行写入操作for(inti=;i《;i++){g_cArray=’a’;Sleep();}//释放互斥对象g_clsMutex.Unlock();return;}UINTThreadProc(LPVOIDpParam){//等待互斥对象通知g_clsMutex.Lock();//对共享资源进行写入操作for(inti=;i《;i++){g_cArray=’b’;Sleep();}//释放互斥对象g_clsMutex.Unlock();return;}……voidCSampleView::OnMutexMfc(){//启动线程AfxBeginThread(ThreadProc,NULL);AfxBeginThread(ThreadProc,NULL);//等待计算完毕Sleep();//报告计算结果CStringsResult=CString(g_cArray);AfxMessageBox(sResult);}