是否存在可连接自定义端口SMB共享的Windows API?
连接自定义端口SMB服务器的API解决方案
1. 直接使用CreateFile(支持全Windows版本)
你可以通过带端口的UNC路径调用CreateFile,格式为\\<服务器地址>:<端口>\<共享名>,示例代码如下:
HANDLE hShare = CreateFile( L"\\\\"192.168.1.100":15623\\myShare", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
如果需要将该共享映射为本地驱动器号,可以搭配DefineDosDevice函数实现持久化映射。
2. WNetAddConnection2的间接 workaround
虽然WNetAddConnection2不支持UNC路径带端口,但可以通过修改本地LMHOSTS文件或添加DNS SRV记录,将自定义端口的SMB服务绑定到一个别名,之后直接用别名调用WNetAddConnection2。不过这种方法需要修改系统配置,灵活性较差。
3. 针对Windows 10+的SMBConnect API
从Windows 10 1709版本开始,微软提供了SMBConnect(SMB客户端专用API),可以直接指定服务器IP和端口,示例伪代码:
SMB_CONNECT_INFO connectParams = {0}; connectParams.StructSize = sizeof(SMB_CONNECT_INFO); connectParams.ServerName = L"192.168.1.100"; connectParams.Port = 15623; connectParams.SecurityMode = SMB_SECURITY_MODE_NEGOTIATE; SMB_CONNECTION_HANDLE connectionHandle; NTSTATUS result = SMBConnect(&connectParams, &connectionHandle);
这个API适合需要精细控制SMB连接参数的场景,但仅支持较新的Windows系统。
注意:所有方案都需要确保目标服务器的自定义SMB端口已开放,且本地/远程防火墙允许该端口的TCP流量。
内容的提问来源于stack exchange,提问作者LOST




