C#做windows登陆程序,上传文件
主 题: C#做windows登陆程序,上传文件
作 者: jb2008 (飞天.net)
等 级:
信 誉 值: 99
所属论坛: .NET技术 C#
问题点数: 200
回复次数: 17
发表时间: 2003-3-21 10:59:51
用C#做WindForm客户端,把文件上传到服务器上的一个共享目录中。
怎样登陆windows,取得Copy权限信任。
上面是上传文件的一个方法,有没有更好的方法?
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 11:04:05 得分:50
参考
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconprincipalidentityobjects.htm
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 11:04:29 得分:50
可将 GenericIdentity 类和 GenericPrincipal 类合起来使用,以创建独立于 Windows NT 或 Windows 2000 域的身份验证方案。例如,使用这两个对象的应用程序可能会提示用户输入姓名和密码,并将其同数据库项进行核对,然后根据数据库中的值创建标识和用户对象。
参考
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconcreatinggenericprincipalgenericidentityobjects.htm
回复人: jb2008(飞天.net) ( 五级(中级)) 信誉:99 2003-3-21 11:09:51 得分:0
我急需示例代码,
问题解决,马上给分
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 11:51:16 得分:50
FileInfo fi = new FileInfo(源文件);
string name = @"\\服务器文件名\tt.txt";
fi.CopyTo(name);
这样有什么问题吗?
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 11:54:13 得分:0
System.Threading.Thread.CurrentPrincipal
获取或设置线程的当前负责人(对基于角色的安全性而言)。
如果需要权限
创建设定你需要的用户身份
然后付给当前线程
回复人: jb2008(飞天.net) ( 五级(中级)) 信誉:99 2003-3-21 11:54:13 得分:0
To,龙人
当然有问题,你不登陆,怎么把文件Copy过去,没有权限啊
回复人: jb2008(飞天.net) ( 五级(中级)) 信誉:99 2003-3-21 11:55:38 得分:0
怎么样打通权限?
示例代码。/
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 12:03:11 得分:0
WindowsIdentity MyIdentity = new WindowsIdentity(hToken);
-- 其中 hToken 表示一个 Windows 标记。此标记通常通过调用非托管代码(如调用 Win32 API LogonUser)来检索WindowsPrincipal MyPrincipal = new WindowsPrincipal(MyIdentity);
System.Threading.Thread.CurrentPrincipal = MyPrincipal;
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 12:03:46 得分:0
吃饭了~~~
下午再讨论~~`````````
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 12:06:08 得分:0
我记得有一段获得hToken的代码
忘记在那里的
找到了贴给你
:)
回复人: timmy3310(Tim) ( 两星(中级)) 信誉:171 2003-3-21 12:59:50 得分:0
up
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 12:59:54 得分:0
这是一段获取htoken的程序
using System;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Security.Permissions;
[assembly:SecurityPermissionAttribute(SecurityAction.RequestMinimum, UnmanagedCode=true)]
public class Class1
{
[DllImport("C:\\WINNT\\System32\\advapi32.dll")]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
int dwLogonType, int dwLogonProvider, out int phToken);
[DllImport("C:\\WINNT\\System32\\Kernel32.dll")]
public static extern int GetLastError();
public static void Main(string[] args)
{
// The Windows NT user token.
int token1;
// Get the user token for the specified user, machine, and password using the unmanaged LogonUser method.
bool loggedOn = LogonUser(
// User name.
"",
// Computer name.
"",
// Password.
"",
// Logon type = LOGON32_LOGON_NETWORK_CLEARTEXT.
3,
// Logon provider = LOGON32_PROVIDER_DEFAULT.
0,
// The user token for the specified user is returned here.
out token1);
Console.WriteLine("LogonUser called");
// Call GetLastError to try to determine why logon failed if it did not succeed.
int ret = GetLastError();
Console.WriteLine("LogonUser Success? " + loggedOn);
Console.WriteLine("NT Token Value: " + token1);
if (ret != 0) Console.WriteLine("Error code (126 == \"Specified module could not be found\"): " + ret);
//Starting impersonation here:
Console.WriteLine("\n\nBefore impersonation:\n");
WindowsIdentity mWI1 = WindowsIdentity.GetCurrent();
Console.WriteLine(mWI1.Name);
Console.WriteLine(mWI1.Token);
IntPtr token2 = new IntPtr(token1);
Console.WriteLine("\n\nNew identity created:\n");
WindowsIdentity mWI2 = new WindowsIdentity(token2);
Console.WriteLine(mWI2.Name);
Console.WriteLine(mWI2.Token);
// Impersonate the user.
WindowsImpersonationContext mWIC = mWI2.Impersonate();
Console.WriteLine("\n\nAfter impersonation:\n");
WindowsIdentity mWI3 = WindowsIdentity.GetCurrent();
Console.WriteLine(mWI3.Name);
Console.WriteLine(mWI3.Token);
// Revert to previous identity.
mWIC.Undo();
Console.WriteLine("\n\nAfter impersonation is reverted:\n");
WindowsIdentity mWI4 = WindowsIdentity.GetCurrent();
Console.WriteLine(mWI4.Name);
Console.WriteLine(mWI4.Token);
}
}
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 13:00:59 得分:0
顺便说一下
你必须知道你要获取的有效用户
user name 和Passwork
不然是没办法的
(那就不是写程序,到可以去做黑客了)
祝成功~~~
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-21 14:58:12 得分:0
你试试这一段,我没有环境没测试
int token1;
// Get the user token for the specified user, machine, and password using the unmanaged LogonUser method.
string uname = 用户;
string upwd = 密码;
string uDomain = 域名;
bool loggedOn = LogonUser(
// User name.
uname,
// Domain or Computer name.
uDomain,
// Password.
upwd,
// Logon type = LOGON32_LOGON_NETWORK_CLEARTEXT.
3,
// Logon provider = LOGON32_PROVIDER_DEFAULT.
0,
// The user token for the specified user is returned here.
out token1);
//string s = WindowsIdentity.GetCurrent().Token.ToString();
//Thread.CurrentPrincipal.Identity
System.IntPtr token2;
//token2 = WindowsIdentity.GetCurrent().Token;
token2 = new IntPtr(token1);
WindowsIdentity MyIdentity = new WindowsIdentity(token2);
WindowsPrincipal MyPrincipal = new WindowsPrincipal(MyIdentity);
Thread.CurrentPrincipal = MyPrincipal;
FileInfo fi = new FileInfo(源文件名);
//string name = textBox2.Text + "tt.txt";
string name = @"\\共享目录\tt.txt";
fi.CopyTo(name);
回复人: jb2008(飞天.net) ( 五级(中级)) 信誉:99 2003-3-21 16:13:37 得分:0
报错为无法用标记中获取用户名和密码,
另,那个DoMain能不能是IP
回复人: dragontt(龙人) ( 两星(中级)) 信誉:130 2003-3-24 10:08:29 得分:50
弄好没有
那里不能填写IP
我刚试了,不可以
该问题已经结贴 ,得分记录: dragontt (50)、 dragontt (50)、 dragontt (50)、 dragontt (50)、