使用NetShareDelEx触发ERROR_INVALID_LEVEL(错误124)的问题排查
问题分析与解决
你遇到的ERROR_INVALID_LEVEL(错误124),核心原因是NetShareDelEx的参数规范和NetShareAdd/NetShareDel完全不同——它不接受SHARE_INFO系列结构体,而是要求使用专门的SHARE_DEL_INFO系列结构体,且level参数仅支持0或1,分别对应SHARE_DEL_INFO_0和SHARE_DEL_INFO_1。
关键错误点
你尝试传入SHARE_INFO_0/1/2结构体给NetShareDelEx,这完全不符合函数的参数要求,无论level设为0、1还是2,都会触发错误124。
正确用法示例
NetShareDelEx的设计目的是支持强制删除(比如踢掉当前连接的用户),以下是修正后的调用代码:
方案1:使用level 0(仅指定共享名)
SHARE_DEL_INFO_0 delInfo0; ZeroMemory(&delInfo0, sizeof(SHARE_DEL_INFO_0)); delInfo0.sdli0_netname = L"SharedFolderEx"; // 要删除的共享名 DWORD status = NetShareDelEx(NULL, 0, (LPBYTE)&delInfo0); if (status != NERR_Success) { printf("NetShareDelEx failed, Error code: %d\n", status); return; }
方案2:使用level 1(支持强制删除)
如果需要强制删除正在被使用的共享,可以指定SD_DEL_FORCE标志:
SHARE_DEL_INFO_1 delInfo1; ZeroMemory(&delInfo1, sizeof(SHARE_DEL_INFO_1)); delInfo1.sdli1_netname = L"SharedFolderEx"; delInfo1.sdli1_flags = SD_DEL_FORCE; // 强制删除,踢掉连接用户 DWORD status = NetShareDelEx(NULL, 1, (LPBYTE)&delInfo1); if (status != NERR_Success) { printf("NetShareDelEx failed, Error code: %d\n", status); return; }
额外说明
- SHARE_DEL_INFO_0仅包含共享名字段,功能和NetShareDel基本一致;
- SHARE_DEL_INFO_1多了一个
sdli1_flags字段,支持SD_DEL_FORCE(强制删除)和SD_DEL_STICKY(删除粘性共享)两种标志,这也是NetShareDelEx相对于NetShareDel的核心优势。
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

