问题标签 [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.
.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
对象是什么)有所了解,并且指针可能已经溢出到它不应该的结果中?我仍然不明白为什么这个错误只会在某些时候发生。
我如何理解/避免这个错误?
c++ - Windows Netapi32
我目前正在使用 访问 Windows Netapi32
,Netapi32.lib
目前我正在使用c++
访问 api。我在检索计算机名称时遇到问题,目前是NetFileEnum
here on FILE_INFO_3
structure 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++ 上做到这一点。
完整的测试程序:
输出:
从构建:
跑:
c - 线程外部终止时的 NetServerEnum 块
(在 Win32 api 中工作,在 VS2010 的 C 环境中工作)
我有一个两线程应用程序。第一个线程分叉第二个线程并等待给定的时间间隔 - 'TIMEOUT',然后调用TerminateThread()
它。同时,第二个线程调用NetServerEnum()
.
看来,当达到 timeout 时,无论是否NetServerEnum
成功返回,第一个线程都会死锁。我已经注意到它NetServerEnum
创建了自己的工作线程。
我最终导致其中一个线程陷入死锁,通常是 on ntdll.dll!RtlInitializeExceptionChain
,无法优雅地退出我的进程。
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)
c++ - 枚举局域网中装有 Windows 操作系统的机器
我想枚举工作组中网络中所有基于 Windows 的机器。为此,我正在使用 NetApi32.dll 函数。在我的网络中,我安装了 windows、mac 和 linux 操作系统。我们如何才能仅过滤掉 Windows 机器。下面给出的是我正在使用的代码。如果我犯了任何错误或者是否有任何替代方法可以实现它,请发表评论。
delphi - 在 delphi 中使用 TAPI3 接收呼叫
当我使用下面的代码在delphi 7中编写tapi3时,我可以拨打电话,但我无法捕捉任何事件。有没有人面临同样的问题?
当有人通过调制解调器给我打电话时,我需要获取来电显示。
谢谢 。
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 运行时一样。
将其包装在一起的最佳方法是什么?
c# - 如何使用 C# 获取与服务器上资源的当前连接(类似于“net file”命令的输出)
在命令提示符下,如果net file
执行,它会显示在任何共享文件夹上打开的资源,并且还会显示正在访问该资源的用户名。
可以从计算机管理 (compmgmt.msc) -> 系统工具 -> 共享文件夹 -> 打开文件中查看相同的信息。
可以使用 VBScript 访问相同的信息:
如何通过 C# 访问相同的信息?(不new file
从 C# 运行命令 - 这会截断资源中的长路径名)。
Win32_ServerConnection
是否可以使用 WMI(哪个类?-我相信不会给出打开的资源的路径;与 相同Win32_ServerSession
)或 Netapi32.dll来获取此信息?如果是这样,如何做到这一点?
注意:需要一种方法来获取打开的文件的完整路径,类似于命令提示符和计算机管理中的屏幕截图中的信息。
有任何想法吗?
windows - 删除安全支持包
所以我正在研究一个 powershell 脚本来管理专门控制的安全支持提供程序。目前我有脚本可以添加 SSP,但是当我尝试将脚本更改为删除 ssp 时,它会中断。
这是代码:
每次我运行此程序时,我都会得到:使用“1”参数调用“DeleteSecurityPackage”的异常:“不支持请求的函数
但是这段添加 ssp 的代码可以正常工作:
按理说它应该更容易删除,因为我不需要担心结构,但它并不高兴。
任何帮助,将不胜感激
c# - 从 NetApi32 使用 NetServerEnum 时访问被拒绝
我正在尝试使用 NetApi32 dll 中的 NetServerEnum 函数,但我得到的只是错误代码 5:“访问被拒绝。”。下面是我对外部 dll 函数的调用。
该函数被声明为,
我尝试将我的域名添加到函数调用中,并使用不同的信息级别进行调用,但这也不起作用。
这是该函数的 microsoft 文档的链接:https ://msdn.microsoft.com/en-us/library/windows/desktop/aa370623%28v=vs.85%29.aspx
这个函数调用是否需要一组特定的权限?我显然在这里遗漏了一些东西,但我不知道是什么。