本地计算机上的 OpenSCManager - NULL 与 "localhost" 作为 lpMachineName

OpenSCManager on local machine - NULL vs "localhost" as lpMachineName

根据 OpenSCManager lpMachineName 参数上的 MSDN documentation OpenSCManager WinApi 函数:

If the pointer is NULL or points to an empty string, the function connects to the service control manager on the local computer.

传递“localhost”或“127.0.0.1”是否会导致与传递 NULL 或空字符串完全相同的行为?或者我应该检查我的逻辑并在调用 OpenSCManager 之前用 NULL 替换“localhost”或“127.0.0.1”?

OpenSCManager 当然使用特殊的快速路径连接到本地服务控制管理器。要使用此快速路径 OpenSCManager 需要以某种方式检测我们要连接到本地数据库。这当然是通过检查 lpMachineName 完成的。最好的和有记录的变体 - 将在此处使用 NULL 指针。如果使用空字符串,效果几乎相同。然后可能 OpenSCManager 可以将 lpMachineName 与一些硬比较编码字符串。在我的测试中,它将 lpMachineNamelocalhost. 如果不匹配 - 需要转到慢速路径。对于 127.0.0.1 字符串函数未检查。

为了比较快慢路径,OpenSCManager的一些内部片段:

快速路径:(此处和所选路径)

慢路径:

快速路径:

慢路径:

快速路径:

慢路径: