StartService VB中的调用方法

Api Loader 中的声明为:

Private Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" (ByVal hService As Long, ByVal dwNumServiceArgs As Long, ByVal lpServiceArgVectors As Long) As Long

如果第二个参数 dwNumServiceArgs 不为 0 ,则表示 有附加参数 ,附加参数 在第三个参数 lpServiceArgVectors 指向的地址

假如参数为 ABCD ,如果直接按下面的操作:

Dim sArgs As String

sArgs = "ABCD"
r = StartService(ser, 1, StrPtr(sArgs))

在调试运行状态下,运行没问题,对应的服务也能正常启动,但是编译后运行程序会崩溃

后来,通过调试器 x64dbg 查看正常程序的调用参数,修改代码如下,程序可以正常运行不会崩溃

Dim sArgs As String, pStr As Long
sArgs = "ABCD"
pStr = StrPtr(sArgs)
'r = StartService(ser, 1, StrPtr(sArgs))
r = StartService(ser, 1, VarPtr(pStr))

这可能就是指针的指针了

原文地址:https://www.cnblogs.com/czcbzc/p/15043385.html