提升MOSS Event Handler事件处理程序运行级别的方法

时间:2021-04-16 14:58:59
MOSS 的列表事件处理程序,默认是以当前用户的权限来操作的, 但是如果要进行当前用户权限以外的操作,比如设定条目权限....等等, 这种情况就要提升当前进程的权限了.

在Choral主页中找到这个方法,(没有试验,准备试验中...)

http://blog.joycode.com/choral/archive/2007/05/14/102528.aspx

没有想到那么简单, 以前我还是自己用API函数来搞定, 真是弱智呀.不过把那个用API函数搞定的程序的也贴进来,大家共享一下:

提升MOSS Event Handler事件处理程序运行级别的方法
提升MOSS Event Handler事件处理程序运行级别的方法
提升MOSS Event Handler事件处理程序运行级别的方法        
// 以下用户管理用户来登录
提升MOSS Event Handler事件处理程序运行级别的方法

提升MOSS Event Handler事件处理程序运行级别的方法        
protected   static  WindowsIdentity CreateIdentity( string  User,  string
提升MOSS Event Handler事件处理程序运行级别的方法            Domain, 
string  Password)
提升MOSS Event Handler事件处理程序运行级别的方法提升MOSS Event Handler事件处理程序运行级别的方法        
{
提升MOSS Event Handler事件处理程序运行级别的方法            
// The Windows NT user token.
提升MOSS Event Handler事件处理程序运行级别的方法
            IntPtr tokenHandle = new IntPtr(0);
提升MOSS Event Handler事件处理程序运行级别的方法 
提升MOSS Event Handler事件处理程序运行级别的方法            
const int LOGON32_PROVIDER_DEFAULT = 0;
提升MOSS Event Handler事件处理程序运行级别的方法            
const int LOGON32_LOGON_NETWORK = 3;
提升MOSS Event Handler事件处理程序运行级别的方法 
提升MOSS Event Handler事件处理程序运行级别的方法            tokenHandle 
= IntPtr.Zero;
提升MOSS Event Handler事件处理程序运行级别的方法 
提升MOSS Event Handler事件处理程序运行级别的方法            
// Call LogonUser to obtain a handle to an access token.
提升MOSS Event Handler事件处理程序运行级别的方法
            bool returnValue = LogonUser(User, Domain, Password, 
提升MOSS Event Handler事件处理程序运行级别的方法                LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT,
提升MOSS Event Handler事件处理程序运行级别的方法                
ref tokenHandle);
提升MOSS Event Handler事件处理程序运行级别的方法 
提升MOSS Event Handler事件处理程序运行级别的方法            
if (false == returnValue)
提升MOSS Event Handler事件处理程序运行级别的方法提升MOSS Event Handler事件处理程序运行级别的方法            
{
提升MOSS Event Handler事件处理程序运行级别的方法                
int ret = Marshal.GetLastWin32Error();
提升MOSS Event Handler事件处理程序运行级别的方法                
throw new Exception("LogonUser failed with error code: " +  ret);
提升MOSS Event Handler事件处理程序运行级别的方法            }

提升MOSS Event Handler事件处理程序运行级别的方法 
提升MOSS Event Handler事件处理程序运行级别的方法            System.Diagnostics.Debug.WriteLine(
"Created user token: " +
提升MOSS Event Handler事件处理程序运行级别的方法                tokenHandle);
提升MOSS Event Handler事件处理程序运行级别的方法 
提升MOSS Event Handler事件处理程序运行级别的方法            
//The WindowsIdentity class makes a new copy of the token.
提升MOSS Event Handler事件处理程序运行级别的方法            
//It also handles calling CloseHandle for the copy.
提升MOSS Event Handler事件处理程序运行级别的方法
            WindowsIdentity id = new WindowsIdentity(tokenHandle);
提升MOSS Event Handler事件处理程序运行级别的方法            CloseHandle(tokenHandle);
提升MOSS Event Handler事件处理程序运行级别的方法            
return id;
提升MOSS Event Handler事件处理程序运行级别的方法        }

提升MOSS Event Handler事件处理程序运行级别的方法 
提升MOSS Event Handler事件处理程序运行级别的方法        [DllImport(
" advapi32.dll " , SetLastError = true )]
提升MOSS Event Handler事件处理程序运行级别的方法        
private   static   extern   bool  LogonUser(String lpszUsername, String
提升MOSS Event Handler事件处理程序运行级别的方法            lpszDomain, String lpszPassword,
提升MOSS Event Handler事件处理程序运行级别的方法            
int  dwLogonType,  int  dwLogonProvider,  ref  IntPtr phToken);
提升MOSS Event Handler事件处理程序运行级别的方法 
提升MOSS Event Handler事件处理程序运行级别的方法        [DllImport(
" kernel32.dll " , CharSet = CharSet.Auto)]
提升MOSS Event Handler事件处理程序运行级别的方法        
private   extern   static   bool  CloseHandle(IntPtr handle);

使用的时候, 应该这样使用:

提升MOSS Event Handler事件处理程序运行级别的方法WindowsImpersonationContext wic  =  CreateIdentity ( " 用户 " , " 域名 " , " 密码 " ) .Impersonate();

使用完毕,应该释放权限:

提升MOSS Event Handler事件处理程序运行级别的方法wic.Undo ();


结束!  今天真高兴, 终于找到一个捷径,但我提供的程序代码,不仅可以用在MOSS和SharePoint中,开发ASPX、DLL、其它程序也都可以用哦。