madCHook.dll 声明的转化 请高手都进来看,不是一般的问题!

startbin 2007-06-07 01:20:19
以下是函数在c的声明
#include <windows.h>
#include "madCHook.h"
UINT (WINAPI *WinExecNextHook)(LPCSTR lpCmdLine, UINT uCmdShow);//这句是声明指针变量WinExecNextHook
UINT WINAPI WinExecHookProc(LPCSTR lpCmdLine, UINT uCmdShow)//定义一个新的函数代替回调函数就是代替WinExecNextHook保存的地址处的函数
{
if (MessageBox(0, lpCmdLine, "Execute?", MB_YESNO | MB_ICONQUESTION) == IDYES)
return WinExecNextHook(lpCmdLine, uCmdShow);//如果是调用原来的回调函数
else
return ERROR_ACCESS_DENIED;//否返回拒绝访问
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
InitializeMadCHook();//初始化钩子
//用新的回调函数代替原来的,并保存系统原来函数地址
HookAPI("kernel32.dll", "WinExec", WinExecHookProc, (PVOID*) &WinExecNextHook);
WinExec("notepad.exe", SW_SHOWNORMAL);//运行记事本,将会调用新的函数WinExecHookProc
UnhookAPI((PVOID*) &WinExecNextHook);//该回原来的设置
FinalizeMadCHook();//钩子释放处理
return true;//返回系统应该是return 0比较好吧??
}



#include "madCHook.h"
把madCHook.h代码贴上来
头文件太大了,贴不出来,不过与HOOKAPI相关的我找出来贴到下面了:
madCHookApi(BOOL) HookAPI(
LPCSTR pszModule,
LPCSTR pszFuncName,
PVOID pCallbackFunc,
PVOID *pNextHook,
#ifdef __cplusplus
DWORD dwFlags = 0
#else
DWORD dwFlags
#endif
);

以上代码在vb中应该如何声明,和调用呢,请会的高人帮忙转化一下,要带个调用例子的,代码调试成功报酬可商议~~谢谢了startbin#126.com
...全文
877 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2007-06-08
  • 打赏
  • 举报
回复
Declare Function WinExecNextHook Lib "madCHOOK.dll" (Byval lpCmdLine as string,byval uCmdShow as long) as long

Declare Function HookAPI Lib "madCHOOK.dll" (Byval pszModule as string, _
byval pszFuncName as string, _
byref pCallbackFunc as any, _
byref pNextHook as any, _
byval dwFlags as long) as boolean

好象应该是这样的吧

看你,是想做拦截API?

这里有一个VB6内嵌ASM实现的HOOK API类,是豆子写的:

http://www.m5home.com/bbs/dispbbs.asp?boardID=10&ID=1041&page=1
嗷嗷叫的老马 2007-06-08
  • 打赏
  • 举报
回复
//2.获取/修改不了参数(致命问题)

怎么会?

那个类提供了参数获取与修改的功能,你仔细看一下代码.

我已经实现了对TerminateProcess的拦截,并在其参数里判断是否为本进程PID,实现防止被结束进程.....

看这里:

http://www.m5home.com/1/

当然,只是实现了HOOK进程管理器而已.

全局的没试过....

至于效率,这个就不清楚了.

我没有大量使用过此代码.....仅是作为学习的参考.
startbin 2007-06-08
  • 打赏
  • 举报
回复
接分~虽然我很穷,也是一点点心意
startbin 2007-06-08
  • 打赏
  • 举报
回复
嗯~谢谢楼上的热心回答

我现在没办法只能用powerbasic做dll,让vb调用了

这样比较郁闷,多了个dll
VirtualDesktop 2007-06-08
  • 打赏
  • 举报
回复
首先 WinExecNextHook 不是一个输出函数,只是一个指向原函数的指针

===================================

那就直接声明成long型变量,然后用 addressof 一个函数地址赋值给它
还有一个问题就是,这个东西即使翻译成vb好像也无法正常工作,我以前也做过,不知道是什么问题,最后我是用C++再包了一层再给vb调用的,很郁闷


======================================================

Public Declare Function GetCurrentSessionId Lib "madCHook.dll" () As Long
Public Declare Function AmUsingInputDesktop Lib "madCHook.dll" () As Long

'CreateIpcQueue( _
LPCSTR pIpc, _
PIPC_CALLBACK_ROUTINE pCallback _
);
Public Declare Function CreateIpcQueue Lib "madCHook.dll" (ByVal pIpc As String, ByVal pCallback As Long) As Long

'InjectLibraryA( _
DWORD dwProcessHandleOrSpecialFlags, _
LPCSTR pLibFileName, _
#ifdef __cplusplus _
DWORD dwTimeOut = 7000 _
#Else _
DWORD dwTimeOut _
#End If _
);
Public Declare Function InjectLibraryAnsi Lib "madCHook.dll" Alias "InjectLibraryA" _
(ByVal dwProcessHandleOrSpecialFlags As Long, _
ByVal pLibFileName As String, _
ByVal dwTimeOut As Long) As Long

Public Declare Function InjectLibraryUnicode Lib "madCHook.dll" Alias "InjectLibraryW" _
(ByVal dwProcessHandleOrSpecialFlags As Long, _
ByVal pLibFileName As String, _
ByVal dwTimeOut As Long) As Long

Public Declare Function UnInjectLibraryAnsi Lib "madCHook.dll" Alias "UninjectLibraryA" _
(ByVal dwProcessHandleOrSpecialFlags As Long, _
ByVal pLibFileName As String, _
ByVal dwTimeOut As Long) As Long

Public Declare Function UnInjectLibraryUnicode Lib "madCHook.dll" Alias "UninjectLibraryW" _
(ByVal dwProcessHandleOrSpecialFlags As Long, _
ByVal pLibFileName As String, _
ByVal dwTimeOut As Long) As Long

'madCHookApi(BOOL) SendIpcMessage( _
LPCSTR pIpc, _
PVOID pMessageBuf, _
DWORD dwMessageLen, _
#ifdef __cplusplus _
PVOID pAnswerBuf = NULL, _
DWORD dwAnswerLen = 0, _
DWORD dwAnswerTimeOut = INFINITE, _
BOOL bHandleMessage = True _
#Else _
PVOID pAnswerBuf, _
DWORD dwAnswerLen, _
DWORD dwAnswerTimeOut, _
BOOL bHandleMessage _
#End If _
);

Public Declare Function SendIpcMessage Lib "madCHook.dll" ( _
ByVal pIpc As String, _
ByRef pMessageBuf As TDllInjectRequest, _
ByVal dwMessageLen As Long, _
ByVal pAnswerBuf As Long, _
ByVal dwAnswerLen As Long, _
ByVal dwAnswerTimeOut As Long, _
ByVal bHandleMessage As Long) As Long


'madCHookApi(BOOL) HookAPI( _
LPCSTR pszModule, _
LPCSTR pszFuncName, _
PVOID pCallbackFunc, _
PVOID *pNextHook, _
#ifdef __cplusplus _
DWORD dwFlags = 0 _
#Else _
DWORD dwFlags _
#End If _
);

Public Declare Function HookAPI Lib "madCHook.dll" ( _
ByVal pszModule As String, _
ByVal pszFuncName As String, _
ByVal pCallbackFunc As Long, _
ByVal pNexthook As Long, _
ByVal dwFlags As Long) As Long


'madCHookApi(BOOL) UnhookAPI ( PVOID *pNextHook );
Public Declare Function UnhookAPI Lib "madCHook.dll" (ByVal pNexthook As Long) As Long

'madCHookApi(VOID) AutoUnhook (HINSTANCE hinstDLL);
Public Declare Sub AutoUnhook Lib "madCHook.dll" (ByVal hinstDLL As Long)


Public Declare Sub SetLastError Lib "kernel32" (ByVal dwErrCode As Long)
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)


'typedef struct
'// this is the information record which we send to our injection service
'TDllInjectRequest { _
BOOL bInject; _
DWORD dwTimeOut; _
DWORD dwSession; _
} *PDllInjectRequest;

Public Type TDllInjectRequest
bInject As Long
dwTimeOut As Long
dwSession As Long
End Type


'typedef struct _
// this is the information record which our dll sends us _
TTerminationRequest { _
BYTE bSystem; _
CHAR szProcess1 [MAX_PATH + 1]; _
CHAR szProcess2 [MAX_PATH + 1]; _
} *PTerminationRequest;

Public Type TTerminationRequest
bSystem As Byte
szProcess1 As String * 261
szProcess2 As String * 261
End Type

Public Const CURRENT_SESSION As Long = &HFFFFFFEC
Public Const SYSTEM_PROCESSES As Long = &H10
Public Const INFINITE As Long = &HFFFFFFFF
Public Const ERROR_ACCESS_DENIED As Long = 5
startbin 2007-06-08
  • 打赏
  • 举报
回复
谢谢马兄的回复,可惜不对
首先 WinExecNextHook 不是一个输出函数,只是一个指向原函数的指针

还有你那个例子早就有了,缺点太多
1.效率太差
2.获取/修改不了参数(致命问题)
startbin 2007-06-07
  • 打赏
  • 举报
回复
你这也叫翻译,随便贴点东西,郁闷啊,csdn的高手们都隐身了吗
ldq 2007-06-07
  • 打赏
  • 举报
回复
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
Declare Function CallNextHookEx Lib "user32" Alias "CallNextHookEx" _
(ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Declare Function UnhookWindowsHookEx Lib "user32" Alias "UnhookWindowsHookEx" _
(ByVal hHook As Long) As Long
具体用法到http://www.xuevb.net/modules/news/article.php?storyid=334
给分,, 哈哈!!
startbin 2007-06-07
  • 打赏
  • 举报
回复
顶一下,不是吧真 的没高手知道~~~人气真的很.......
内容概要:本文围绕城市场景下的无人机三维路径规划问题,提出了一种新颖的多目标粒子群优化算法(NMOPSO),旨在解决高维复杂环境中路径规划面临的多重挑战。研究聚焦于导航变量的多目标优化,构建了一个包含路径长度、飞行安全性、能量消耗等多个相互冲突目标的优化模型,并采用改进的粒子群算法进行高效搜索,最终获得一组Pareto最优解集,为实际决策提供多样化路径选择方案。该方法结合Matlab代码实现,详细阐述了算法的设计机制、数学建模流程及仿真验证过程,充分展示了其在密集城市建筑环境中有效规避障碍物、满足飞行动力学约束并实现多目标权衡的能力,具有较强的工程应用价值。; 适合人群:具备一定优化算法理论基础和Matlab编程能力,从事无人机路径规划、智能交通系统、自动化控制、人工智能应用等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于城市环境中的无人机物流配送、巡检监控、应急救援等实际任务的三维路径规划;②为高维、非线性、多约束的多目标优化问题提供有效的算法设计思路与改进参考;③通过Matlab仿真平台复现算法,进一步开展性能测试、参数调优与算法对比研究,推动相关领域的技术创新。; 阅读建议:此资源强调算法原理与工程实践的深度融合,建议读者重点研读目标函数的构建方式、约束条件的处理策略以及NMOPSO算法的核心改进机制,并务必动手运行和调试所提供的Matlab代码,以深入理解算法在三维空间路径优化中的具体实现细节与实际表现。
内容概要:本文档围绕基于10机39节点的电力系统仿真展开,依托Matlab/Simulink平台构建标准电力系统模型,系统性地实现了电力系统稳态与暂态过程的仿真分析。内容涵盖潮流计算、短路故障、暂态稳定性、N-k故障分析、蓄意攻击与级联故障模拟等核心问题,并引入混合整数线性规划(MILP)等优化方法进行电网脆弱性评估与关键故障筛选。文档突出科研复现导向,整合了状态估计、虚假数据注入攻击、优化算法等前沿技术的交叉应用,具有较强的理论深度与工程实践价值。; 适合人群:具备电力系统基本理论知识和Matlab/Simulink仿真能力的研究生、科研人员及电力工程技术人员,特别适用于从事电力系统稳定性分析、安全防护、故障演化机制与优化调度等领域研究的专业人士。; 使用场景及目标:① 掌握10机39节点系统的建模方法与仿真流程;② 学习并复现电力系统典型故障(如短路、N-k故障、级联故障)的建模与动态响应分析;③ 理解基于MILP的电网脆弱性评估、攻击策略建模与故障传播机制;④ 结合优化算法开展电力系统安全防御、恢复策略与韧性提升研究。; 阅读建议:建议结合文档中标注的“顶级EI复现”“核心论文复现”等标签,重点关注模型构建逻辑与代码实现细节,优先运行仿真案例以理解其物理背景与数学建模原理,同时深入分析故障场景设定、目标函数设计及优化求解策略的工程意义与学术价值。

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧