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;
privatestaticexternintLogonUser(StringlpszUserName,StringlpszDomain,StringlpszPassword,
intdwLogonType,intdwLogonProvider,refIntPtrphToken);
privateexternstaticintDuplicateToken(IntPtrhToken,intimpersonationLevel,refIntPtrhNewToken);
privatestaticexternboolRevertToSelf();
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关机
privatestructTokPriv1Luid
{
publicintCount;
publiclongLuid;
publicintAttr;
}
privatestaticexternIntPtrGetCurrentThread();
privatestaticexternboolOpenThreadToken(IntPtrh,intacc,boolopenAsSelf,refIntPtrphtok);
privatestaticexternboolLookupPrivilegeValue(stringhost,stringname,reflongpluid);
privatestaticexternboolAdjustTokenPrivileges(IntPtrhtok,booldisall,refTokPriv1Luidnewst,
intlen,IntPtrprev,IntPtrrelen);
privatestaticexternboolExitWindowsEx(intflg,intrea);
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++编程。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.ckuyun.com),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。 Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。 JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
页:
[1]