仓酷云
标题:
ASP.NET网页设计ASP.NET摹拟其他用户举行关机
[打印本页]
作者:
若天明
时间:
2015-1-16 22:47
标题:
ASP.NET网页设计ASP.NET摹拟其他用户举行关机
学习asp.net两个月有余了,除了对html、web控件比较熟悉(应该是说都能理解和接受)之外,竟不知道自己还会什么。看了两本书:《精通asp.net网络编程》(人民邮电出版社)、《asp.net实用案例教程》(清华大学出版社)。asp.netusingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Security.Principal;
usingSystem.Runtime.InteropServices;
publicclassImpersonate
{
#region摹拟
privateWindowsImpersonationContextimpersonationContext;
privateconstintLOGON32_LOGON_INTERACTIVE=2;
privateconstintLOGON32_PROVIDER_DEFAULT=0;
[DllImport("advapi32.dll",CharSet=CharSet.Auto)]
privatestaticexternintLogonUser(StringlpszUserName,StringlpszDomain,StringlpszPassword,
intdwLogonType,intdwLogonProvider,refIntPtrphToken);
[DllImport("advapi32.dll",CharSet=System.Runtime.InteropServices.CharSet.Auto,SetLastError=true)]
privateexternstaticintDuplicateToken(IntPtrhToken,intimpersonationLevel,refIntPtrhNewToken);
[DllImport("advapi32.dll",CharSet=CharSet.Auto,SetLastError=true)]
privatestaticexternboolRevertToSelf();
[DllImport("kernel32.dll",CharSet=CharSet.Auto)]
privateexternstaticboolCloseHandle(IntPtrhandle);
///<summary>
///摹拟一个用户
///</summary>
///<paramname="userName">用户名</param>
///<paramname="password">暗码</param>
///<paramname="domain">域名/盘算机名</param>
///<returns>true摹拟乐成,false摹拟失利</returns>
publicboolImpersonateUser(stringuserName,stringpassword,stringdomain)
{
WindowsIdentitywi;
IntPtrtoken=IntPtr.Zero;
IntPtrtokenDuplicate=IntPtr.Zero;
if(RevertToSelf())
{
if(LogonUser(userName,domain,password,
LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,reftoken)!=0)
{
if(DuplicateToken(token,2,reftokenDuplicate)!=0)
{
wi=newWindowsIdentity(tokenDuplicate);
impersonationContext=wi.Impersonate();
if(impersonationContext!=null)
{
CloseHandle(tokenDuplicate);
CloseHandle(token);
returntrue;
}
else
{
if(tokenDuplicate!=IntPtr.Zero)CloseHandle(tokenDuplicate);
if(token!=IntPtr.Zero)CloseHandle(token);
returnfalse;
}
}
else
{
if(token!=IntPtr.Zero)CloseHandle(token);
returnfalse;
}
}
else
returnfalse;
}
else
returnfalse;
}
///<summary>
///作废摹拟
///</summary>
publicvoidUndoImpersonation()
{
impersonationContext.Undo();
}
#endregion
#region关机
[StructLayout(LayoutKind.Sequential,Pack=1)]
privatestructTokPriv1Luid
{
publicintCount;
publiclongLuid;
publicintAttr;
}
[DllImport("kernel32.dll",ExactSpelling=true)]
privatestaticexternIntPtrGetCurrentThread();
[DllImport("advapi32.dll",ExactSpelling=true,SetLastError=true)]
privatestaticexternboolOpenThreadToken(IntPtrh,intacc,boolopenAsSelf,refIntPtrphtok);
[DllImport("advapi32.dll",SetLastError=true)]
privatestaticexternboolLookupPrivilegeValue(stringhost,stringname,reflongpluid);
[DllImport("advapi32.dll",ExactSpelling=true,SetLastError=true)]
privatestaticexternboolAdjustTokenPrivileges(IntPtrhtok,booldisall,refTokPriv1Luidnewst,
intlen,IntPtrprev,IntPtrrelen);
[DllImport("user32.dll",ExactSpelling=true,SetLastError=true)]
privatestaticexternboolExitWindowsEx(intflg,intrea);
[DllImport("advapi32.dll")]
privatestaticexternboolInitiateSystemShutdown(stringMachinename,stringMessage,
longTimeout,boolForceAppsClosed,boolRebootAfterShutdown);
privateconstintSE_PRIVILEGE_ENABLED=0x00000002;
privateconstintTOKEN_QUERY=0x00000008;
privateconstintTOKEN_ADJUST_PRIVILEGES=0x00000020;
privateconststringSE_SHUTDOWN_NAME="SeShutdownPrivilege";
privateconstintEWX_LOGOFF=0x00000000;
privateconstintEWX_SHUTDOWN=0x00000001;
privateconstintEWX_REBOOT=0x00000002;
privateconstintEWX_FORCE=0x00000004;
privateconstintEWX_POWEROFF=0x00000008;
privateconstintEWX_FORCEIFHUNG=0x00000010;
///<summary>
///关机
///</summary>
///<returns></returns>
publicboolShutDown()
{
boolresult;
TokPriv1Luidtp;
//注重:这里用的是GetCurrentThread,而不是GetCurrentProcess
IntPtrhproc=GetCurrentThread();
IntPtrhtok=IntPtr.Zero;
//注重:这里用的是OpenThreadToken(翻开线程令牌),而不是OpenProcessToken(翻开历程令牌)
result=OpenThreadToken(hproc,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
true,refhtok);
tp.Count=1;
tp.Luid=0;
tp.Attr=SE_PRIVILEGE_ENABLED;
result=LookupPrivilegeValue(null,SE_SHUTDOWN_NAME,reftp.Luid);
result=AdjustTokenPrivileges(htok,false,reftp,0,IntPtr.Zero,IntPtr.Zero);
result=InitiateSystemShutdown("","",60,true,false);
returnresult;
}
#endregion
}
我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。
作者:
变相怪杰
时间:
2015-1-19 23:49
在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.ckuyun.com),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
作者:
简单生活
时间:
2015-1-26 08:04
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
作者:
仓酷云
时间:
2015-2-4 13:36
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
作者:
金色的骷髅
时间:
2015-2-9 23:56
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
作者:
不帅
时间:
2015-2-28 09:17
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
作者:
因胸联盟
时间:
2015-3-9 22:06
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
作者:
莫相离
时间:
2015-3-17 02:09
关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。
作者:
灵魂腐蚀
时间:
2015-3-23 15:40
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2