gpt4 book ai didi

c# - 模拟跨网络文件复制

转载 作者:行者123 更新时间:2023-11-30 18:02:23 25 4
gpt4 key购买 nike

我想从同一域中的远程计算机复制文件。所以我正在使用模拟来做到这一点。

我正在使用 advapi32.dll 的 DLLImport,它正确地模拟了用户。

现在,当执行下面的代码行时,出现以下错误。

\\line

File.Copy(@"\\sins00048178\D$\BNCustody\Swift\Received_from_SWIFT\Error_files\E03248681_error.out", @"C:\E03248681_error.out", true);


\\Error
"Logon failure: user not allowed to log on to this computer."

按要求完成代码

 [DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(
string lpszUsername,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
out IntPtr phToken
);

IntPtr userHandle = IntPtr.Zero;
bool loggedOn = LogonUser(userid, domain, pass, 9, 0, out userHandle);

if (loggedOn)
{
WindowsImpersonationContext context = WindowsIdentity.Impersonate(userHandle);
File.Copy(@"\\sins00048178\D$\BNCustody\Swift\Received_from_SWIFT\Error_files\E03248681_error.out", @"C:\E03248681_error.out", true);

context.Undo();

}

提前致谢....

最佳答案

我的模拟代码很相似,但与您的代码略有不同。这是从我组的其他开发人员那里传下来的,我敢肯定它是从网上某个地方复制/粘贴的。不过它确实有效,我们在 Windows 服务和窗体中使用它。

//defined elsewhere
WindowsImpersonationContext impersonatedUser;
WindowsIdentity newId;
IntPtr tokenHandle;

//Impersonate
tokenHandle = IntPtr.Zero;
bool returnValue = LogonUser(userName, domainName, password, 2, 0, ref tokenHandle);
if (returnValue) {
newId = new WindowsIdentity(tokenHandle);
impersonatedUser = newId.Impersonate();
} else {
//do some error handling
}

//Undo impersonation
if (impersonatedUser != null) {
impersonatedUser.Undo();
}
if (tokenHandle != IntPtr.Zero) {
CloseHandle(tokenHandle);
}

关于c# - 模拟跨网络文件复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8149648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com