You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

是否存在可连接自定义端口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

火山引擎 最新活动