问题标签 [netapi32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
640 浏览

.net - 使用 Windows API 时出现致命的ExecutionEngineError

我正在尝试使用调用netapi32.dll来操作 DFS 共享的 Windows API .dll。我们在 Windows Server 2008 R2 上使用 DFS,而我使用的是 .NET 4.0。我以前从未在 .NET 中使用过这样的东西,但我无法理解失败的原因。

我正在使用DllImport调用NetDfsGetInfo来测试获取有关 DFS 共享的信息。我必须为我想从函数接收的信息级别创建结构。

我使用以下代码获取并读取结果:

一切都很好,直到它去读这storage条线。

有时会收到一条错误消息:

运行时遇到致命错误。错误地址位于线程 0x1d44 上的 0x626ac91c。错误代码为 0xc0000005。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户封送错误,这可能会损坏堆栈。

错误类型是fatalExecutionEngineError,它不是 .NET 异常,所以我无法捕捉到它。它不会每次都发生,但我会说大约 50% 的时间会出现此错误。查找Windows 错误代码,我看到 5 是“拒绝访问”。由于只精通介绍级 Comp Sci,我对指针(IntPtr对象是什么)有所了解,并且指针可能已经溢出到它不应该的结果中?我仍然不明白为什么这个错误只会在某些时候发生。

我如何理解/避免这个错误?

0 投票
1 回答
3033 浏览

c++ - Windows Netapi32

我目前正在使用 访问 Windows Netapi32Netapi32.lib目前我正在使用c++访问 api。我在检索计算机名称时遇到问题,目前是NetFileEnum here on FILE_INFO_3structure here之一。在文档中它说,

fi3_username

指向一个字符串的指针,该字符串指定哪个用户(在具有用户级安全性的服务器上)或哪台计算机(在具有共享级安全性的服务器上)打开了资源。请注意,Windows 不支持共享级安全性。如果定义了 _WIN32_WINNT 或 FORCE_UNICODE,则此字符串为 Unicode。

现在,我运行此脚本的网络确实具有共享级别的安全性,我只是不确定如何列出计算机名称。

相关代码

图书馆包括:

初始化结构:

fstatus在我的代码中定义为NET_API_STATUS fStatus,它是 I/O 结构。文档在这里

如果fstatus成功返回值NERR_Success

如果函数失败,返回值可以是以下错误代码之一。

  • ERROR_ACCESS_DENIED用户无权访问请求的信息。
  • ERROR_INVALID_LEVEL为 level 参数指定的值无效。
  • ERROR_INVALID_PARAMETER指定的参数无效。
  • ERROR_MORE_DATA More条目可用。指定一个足够大的缓冲区来接收所有条目。
  • ……

更多在这里

处理我使用的if ((fStatus == NERR_Success) || (fStatus == ERROR_MORE_DATA))

找不到用户名。

以上的原始值:

pTmpfile是第 3 级(此处的文档)缓冲区对象,

bufptr [输出]

此缓冲区以这种格式返回数据,

检索数据:

**重要的是要注意,我已经尝试过使用 vbnet 并且它可以工作,但不知何故无法弄清楚如何在 c++ 上做到这一点。

完整的测试程序:

输出:

从构建:

跑:

0 投票
1 回答
207 浏览

c - 线程外部终止时的 NetServerEnum 块

(在 Win32 api 中工作,在 VS2010 的 C 环境中工作)

我有一个两线程应用程序。第一个线程分叉第二个线程并等待给定的时间间隔 - 'TIMEOUT',然后调用TerminateThread()它。同时,第二个线程调用NetServerEnum().

看来,当达到 timeout 时,无论是否NetServerEnum成功返回,第一个线程都会死锁。我已经注意到它NetServerEnum创建了自己的工作线程。

我最终导致其中一个线程陷入死锁,通常是 on ntdll.dll!RtlInitializeExceptionChain,无法优雅地退出我的进程。

0 投票
1 回答
783 浏览

windows - NetServerEnum create Worker Threads who won't close

While trying to solve a previously asked SO question of mine, I've find that even without my threads, the problem occurs.

what I have now , is a really simple single-threaded code , that calls - NetServerEnum() . when returned, it calls NetApiBufferFree() and return from main, which supposed to end the process. at that point, my thread truly ends, but the process won't exit , as there are 4 threads opened (not by me):

1 * ntdll.dll!TplsTimerSet+0x7c0 (stack is at ntdll.dll!WaitForMultipleObjects)

(This one opened upon the call to NetServerEnum())

3 * ndll.dll!RtValidateHeap+0x170 (stack is at ntdll.dll!ZwWaitWorkViaWorkerFactory+0xa)

(These are open when my code returns)

UPDATE: If I kill the thread running ntdll.dll!TplsTimerSet+0x7c0 externally (using process explorer) , before return of main(), the program exit gracefully. I thought it might be useful to know.

UPDATE2: (some more tech info) I'm using: MS Visual Studio 2010 Ultimate x64 (SP1Rel) on Win7 Enterprise SP1 Code is C (but compile as c++ switch is on) Subsystem: WINDOWS Compiler: cl.exe (using IDE) all other parameters are default.

I'm Using a self modified entry point (/ENTRY:"entry") , and it is the only function In my program):

all the tested mentioned before where preformed inside a windows domain network of about 100 units.

UPDATE 3: This problem does not occur when tested on a (non-virtual) WinXP 32bit. (same binary, though for the Win7 x64 two binary were tested - 32bit over WOW , and native x64)

0 投票
1 回答
287 浏览

c++ - 枚举局域网中装有 Windows 操作系统的机器

我想枚举工作组中网络中所有基于 Windows 的机器。为此,我正在使用 NetApi32.dll 函数。在我的网络中,我安装了 windows、mac 和 linux 操作系统。我们如何才能仅过滤掉 Windows 机器。下面给出的是我正在使用的代码。如果我犯了任何错误或者是否有任何替代方法可以实现它,请发表评论。

0 投票
0 回答
792 浏览

delphi - 在 delphi 中使用 TAPI3 接收呼叫

当我使用下面的代码在delphi 7中编写tapi3时,我可以拨打电话,但我无法捕捉任何事件。有没有人面临同样的问题?

当有人通过调制解调器给我打电话时,我需要获取来电显示。

谢谢 。

0 投票
1 回答
1961 浏览

windows - 如何在 Go 中管理 Windows 用户帐户?

我需要能够从 Go 应用程序管理 Windows 本地用户帐户,而且似乎不使用 CGo,就没有本机绑定。

我最初的搜索让我发现人们说最好使用“exec.Command”来运行“net user”命令,但是在解析响应代码时这似乎很混乱且不可靠。

我发现处理此类事情的函数在 netapi32.dll 库中,但由于 Go 本身不支持 Windows 头文件,因此调用这些函数似乎并不容易。

以https://github.com/golang/sys/tree/master/windows为例,Go 团队似乎一直在重新定义代码中的所有内容,然后调用 DLL 函数。

我很难将它包装在一起,但我已经得到了我想要的低级 API 的模板,然后在它上面包装了一个更高级别的 API,就像核心 Go 运行时一样。

将其包装在一起的最佳方法是什么?

0 投票
0 回答
585 浏览

c# - 如何使用 C# 获取与服务器上资源的当前连接(类似于“net file”命令的输出)

在命令提示符下,如果net file执行,它会显示在任何共享文件夹上打开的资源,并且还会显示正在访问该资源的用户名。

例子: 网络文件示例

可以从计算机管理 (compmgmt.msc) -> 系统工具 -> 共享文件夹 -> 打开文件中查看相同的信息。

例子: 计算机管理打开文件示例

可以使用 VBScript 访问相同的信息:

如何通过 C# 访问相同的信息?(不new file从 C# 运行命令 - 这会截断资源中的长路径名)。

Win32_ServerConnection是否可以使用 WMI(哪个类?-我相信不会给出打开的资源的路径;与 相同Win32_ServerSession)或 Netapi32.dll来获取此信息?如果是这样,如何做到这一点?

注意:需要一种方法来获取打开的文件的完整路径,类似于命令提示符和计算机管理中的屏幕截图中的信息。

有任何想法吗?

0 投票
1 回答
105 浏览

windows - 删除安全支持包

所以我正在研究一个 powershell 脚本来管理专门控制的安全支持提供程序。目前我有脚本可以添加 SSP,但是当我尝试将脚本更改为删除 ssp 时,它会中断。

这是代码:

每次我运行此程序时,我都会得到:使用“1”参数调用“DeleteSecurityPackage”的异常:“不支持请求的函数

但是这段添加 ssp 的代码可以正常工作:

按理说它应该更容易删除,因为我不需要担心结构,但它并不高兴。

任何帮助,将不胜感激

0 投票
1 回答
601 浏览

c# - 从 NetApi32 使用 NetServerEnum 时访问被拒绝

我正在尝试使用 NetApi32 dll 中的 NetServerEnum 函数,但我得到的只是错误代码 5:“访问被拒绝。”。下面是我对外部 dll 函数的调用。

该函数被声明为,

我尝试将我的域名添加到函数调用中,并使用不同的信息级别进行调用,但这也不起作用。

这是该函数的 microsoft 文档的链接:https ://msdn.microsoft.com/en-us/library/windows/desktop/aa370623%28v=vs.85%29.aspx

这个函数调用是否需要一组特定的权限?我显然在这里遗漏了一些东西,但我不知道是什么。