小问题,小问题,能得到切实的解决方案再开帖加分。1、监视注册表子键打开。当某个键被打开时能返回一个通知,让我的程序可以在对方进程读取数值前改变这个数值。2、如何知道其他进程中的某个线程处于:
A、“闲置”状态,即正在等待键盘鼠标的操作
B、“加载完毕”状态,即该线程的加载工作已经完成
A、B其实差不多,实现哪个都行。3、VB.NET写的DLL应该如何处理才可以注入其他进程后正常使用。
A、“闲置”状态,即正在等待键盘鼠标的操作
B、“加载完毕”状态,即该线程的加载工作已经完成
A、B其实差不多,实现哪个都行。3、VB.NET写的DLL应该如何处理才可以注入其他进程后正常使用。
第二个问题估计这个函数可以得到答案"NtQuerySystemThread"
第三个问题豆子回答
至于第一个问题,chenhui530(陈辉) 兄提出的方法我是知道的,可是如果第三个问题不解决恐怕比较麻烦。我想如果能解决第三个问题,那么改造一下使用SetWindowsHookEx的方法就可以注入了(昨天刚完成一个VB.NET利用这个函数来屏蔽WINDOWS键的东东)。我也曾经尝试使用根据豆豆的HOOK API改造的一个.NET版本的HOOK API的半成品的思路去搞这个,整个程序正好是基于调试的,但非常非常的麻烦——需要对每一个进程进行处理的话,将启动非常多的线程,效率要比注入一个DLL低很多(个人认为)。第二个问题,还得请教chenhui530(陈辉) 兄,这个NtQuerySystemThread的VB6声明是如何的?函数原型当然更好,如果有VB.NET的声明那就更更好了:)查找GOOGLE,BAIDU,MSDN都没有啊。。么办法,还得再次求助。。
至于分么,一定要给的,前段时间来的比较少,一方面是时间像水里的海绵……而且还在写几个游戏的修改器,一方面是挂了好几个问题还没解决,有点郁闷:-)来的少了可用分自然不多,不过尽量凑吧,绝对不会少的,再者就是我们坛子里“高科技”多一些学习的同志就更多,而且部分或全部开源我是超级拥护~~~~~~~~~~~~~~~~~~~~~~~估计很多同志也是把自己的东西拿出来分享,促进国产软件的发展喽。
申明是这样的
Private Declare Function NtQueryInformationThread Lib "Ntdll.dll" (ByVal hThread As Long, ByVal ThreadInformationClass As Long, ByVal ThreadInformation As Long, ByVal ThreadInformationLength As Long, ReturnLength As Long) As Long 这里有个实例你可以看下
http://vbsystemlibrary.free.fr/code.php?ID=34
否则 2007-09-22 22:22:22 多BT呀。
Private Declare Function NtQueryInformationThread Lib "Ntdll.dll" (ByVal hThread As Integer, ByVal ThreadInformationClass As IntPtr, ByRef ThreadInformation As THREAD_BASIC_INFORMATION, ByVal ThreadInformationLength As Integer, ByVal ReturnLength As IntPtr) As Integer
Private Structure THREAD_BASIC_INFORMATION
Dim ExitStatus As Integer
Dim TebBaseAddress As Integer
Dim UniqueProcess As Integer
Dim UniqueThread As Integer
Dim AffinityMask As Integer
Dim Priority As Integer
Dim BasePriority As Integer
End Structure
调用方式如下:
Dim TBI As New THREAD_BASIC_INFORMATION
NtQueryInformationThread(ProInfo.hThread, IntPtr.Zero, TBI, Len(TBI), IntPtr.Zero)
Debug.Print(TBI.AffinityMask)
可惜啊,获取回来一直都是一个数字。。忘记了。。我用CreateProcess创建的进程,dwCreationFlags标志为4(暂停),然后ResumeThread恢复主的线程执行,直到进程到达等待输入状态,NtQueryInformationThread的返回的结构都是同一个值。上面的代码我虽然修改了THREAD_BASIC_INFORMATION的声明,但没有任何影响的,本来想用INTEGER数组代替了,不过可读性会下降,就没那么做。
又开始头疼了,试了很多函数都不大行,例如WaitForInputIdle,WaitForSingleObject啥的,看MSDN上的进程和线程操作列表又看不大明白,鸟语不过关啊。。还得继续求。继续求啊