2

我正在尝试以用户身份启动服务并且一切正常,直到我尝试使用没有密码的用户。然后,它无法启动(由于登录错误)。

我做错了什么还是这是“设计使然”?

注册此服务的代码:

    SC_HANDLE schService = CreateService( 
        schSCManager,           
        strNameNoSpaces,      
        strServiceName,           
        SERVICE_ALL_ACCESS,       
        SERVICE_WIN32_OWN_PROCESS, 
        SERVICE_AUTO_START,    
        SERVICE_ERROR_NORMAL,      
        szPath,                  
        NULL,                     
        NULL,                  
        NULL,                    
        strUser,
        (strPassword.IsEmpty())?NULL:strPassword);
4

4 回答 4

2

这可能是由于操作系统安全要求或安全策略。检查安全策略以查看那里是否有任何相关内容。

于 2008-09-25T00:43:42.513 回答
2

是的,确实和安全策略有关。详细说明:

http://technet.microsoft.com/en-us/library/bb457114.aspx

“如果您想禁用无密码登录网络的限制,您可以通过本地安全策略执行此操作。控制空白密码限制的策略设置可以使用本地安全策略或组策略 MMC 管理单元进行修改。您可以使用任一工具在Security Settings\Local Policies\Security Options中找到此策略选项。策略的名称是 Accounts: Limit local account use of blank passwords to console login only。默认情况下启用。"

禁用后,一切正常。

于 2008-09-25T01:12:34.457 回答
0

您需要指定一个空字符串,如果没有密码,则不是 NULL。NULL 不是有效的空字符串,"" 是。可能您应该只传递strPassword最后一个参数。

SC_HANDLE schService = CreateService( 
            schSCManager,           
            strNameNoSpaces,      
            strServiceName,           
            SERVICE_ALL_ACCESS,       
            SERVICE_WIN32_OWN_PROCESS, 
            SERVICE_AUTO_START,    
            SERVICE_ERROR_NORMAL,      
            szPath,                  
            NULL,                     
            NULL,                  
            NULL,                    
            strUser,

// change this line to:
            strPassword.IsEmpty() ? L"" : strPassword);
// or maybe
            strPassword);
于 2008-09-24T23:42:47.293 回答
0

谢谢-实际上我已经尝试过,但无济于事。

如果我启动 services.msc,手动进入服务属性并清除 2 个密码字段,然后按“应用”并尝试启动它,它也失败了。

于 2008-09-24T23:53:31.340 回答