Winapi SetNamedSecurityInfo采用可写路径;缓冲区应该有多大?

Winapi SetNamedSecurityInfo采用可写路径;缓冲区应该有多大?,winapi,path,constants,Winapi,Path,Constants,定义为使用LPTSTR,而不是LPCTSTR。现在,采用LPTSTR的标准Win32 API也有一些指示所需缓冲区长度的方法。有时这在签名中是明确的,有时记录为MAX\u PATH或其他形式。对于SetNamedSecurityInfo,情况并非如此 老实说,我不知道为什么SetNamedSecurityInfo会希望将写入该缓冲区,但可能它会尝试将路径规范化。但是我可能需要支持32768个字符,正如您在文档中看到的那样 pObjectName 指向以null结尾的字符串的指针,该字符串指定 要

定义为使用
LPTSTR
,而不是
LPCTSTR
。现在,采用
LPTSTR
的标准Win32 API也有一些指示所需缓冲区长度的方法。有时这在签名中是明确的,有时记录为
MAX\u PATH
或其他形式。对于
SetNamedSecurityInfo
,情况并非如此


老实说,我不知道为什么
SetNamedSecurityInfo
会希望写入该缓冲区,但可能它会尝试将路径规范化。但是我可能需要支持32768个字符,正如您在文档中看到的那样

pObjectName

指向以null结尾的字符串的指针,该字符串指定 要为其设置安全信息的对象


这意味着将发送到函数中的缓冲区长度始终与缓冲区的字符串长度相关

我猜他们只是输入了错误的类型,应该是const。当然,形式上,这不能被证明(什么是证据?),但name可以指向常量,只读内存。此api从不尝试修改名称-实际上,从意义上讲,这是不需要的。在打开对象句柄之前,需要将名称从win32格式转换为本机格式,但这无论如何都不能就地完成-始终为最终本机路径分配新的缓冲区。这里没有api临时希望在cmdline中写入0的情况,如未提供应用程序名称,则文档会将其标识为以null结尾的字符串。该null是调用者放置字符串输入结尾的位置。但是参数是非常量的,它显然是被调用方修改的。但是怎么做呢?文档中没有说明调用者将修改其值,即使在函数中传递类型为
LPTSTR
的值,也不一定要修改其中的值。与定义为
LPCSTR
相比,它还不够严格。