Bu adım adım makalede, Microsoft ASP.NET sayfalarında Kimliğine bürünülen kullanıcının bağlamında çalışan bir işlem spawn açıklamaktadır. Kimliğine bürünülen kullanıcı bağlamında çalışan bir işlem spawn System.Diagnostics.Process.Start yöntemi kullanamazsınız. ASP.NET'te, kimliğe bürünme düzeyinde iş parçacığı ve işlem düzeyinde gerçekleştirilir olmasıdır. Bu nedenle, ASP.NET'ten spawn herhangi bir işlem kimliğine bürünülen bağlamında değil ve ASP.NET alt işlemi bağlamında çalışır.
Bu soruna geçici bir çözüm bulmak için <a0></a0>, aşağıdaki Win32 Apı çağrıları (P/ınvoke) çağırma platform yapmanız gerekir:
CreateProcessAsUser işlevi, belirtilen parametrelerden biri güvenlik belirteci kimliği altında bir işlem oluşturur. Ancak, birincil simge CreateProcessAsUser işlevi çağrısı gerektirir. Bu nedenle, Kimliğine bürünülen token için birincil bir belirteç dönüştürmeniz gerekir.
Kimliğine bürünülen bir belirteç, DuplicateTokenEx işlevi için birincil bir belirteç dönüştürür. CreateProcessAsUser işlevi çağrısı bu birincil belirteç kullanır.
Not Çalışmak arama için CreateProcessAsUser çalışması için aşağıdaki kullanıcı haklarını güvenlik kimliğine bürünülen kullanıcı için atanmış olması gerekir:
Microsoft Windows 2000 çalıştıran bir bilgisayarda, işlem düzeyi simgesini değiştir kullanıcı hakkı ve Kimliğine bürünülen kullanıcı için kotaları Artır kullanıcı hakkını atamak.
Microsoft Windows Server 2003 veya Microsoft Windows XP çalıştıran bir bilgisayarda, Kimliğine bürünülen kullanıcı için işlem düzeyi simgesini değiştir kullanıcı hakkını atayabilirsiniz.
Microsoft, programlama örneklerini yalnızca gösterim amacıyla sağlar; örtülü veya açık garanti vermez. Buna satılabilirlik veya belirli bir amaca uygunluk zımni garantileri de dahildir, ancak bunlarla sınırlı değildir. Bu makale, gösterilen programlama dilini ve yordamları oluşturmak ve hata ayıklamak amacıyla kullanılan araçları kullanmayı bildiğinizi varsayar. Microsoft destek mühendisleri, belirli bir yordamın işlevselliğinin açıklanmasına yardımcı olabilir, ancak gereksinimlerinizi karşılamaya yönelik olarak ek işlevsellik sağlamak veya yordamlar geliştirmek amacıyla bu örnekleri değiştirmezler. Kimliğine bürünülen kullanıcı bağlamında çalışan bir işlem spawn için <a0></a0>, aşağıdaki adımları izleyin:
Microsoft Visual Studio .NET 2003 ' te yeni bir Visual C# ASP.NET Web uygulaması oluşturmak ve sonra Q889251 uygulamanın adı.
Kod görünümünde WebForm1.aspx dosyasını.
WebForm1.aspx dosyasına aşağıdaki kodu kullanarak bloğu ekleyin.
using System.Runtime.InteropServices;
using System.Security.Principal;
Aşağıdaki kod satırını benzer kod satırını bulun.
public class WebForm1 : System.Web.UI.Page
Adım 4'te tanımlanan kod satırdan sonra aşağıdaki kodu ekleyin.
[StructLayout(LayoutKind.Sequential)] public struct STARTUPINFO
{
public int cb;
public String lpReserved;
public String lpDesktop;
public String lpTitle;
public uint dwX;
public uint dwY;
public uint dwXSize;
public uint dwYSize;
public uint dwXCountChars;
public uint dwYCountChars;
public uint dwFillAttribute;
public uint dwFlags;
public short wShowWindow;
public short cbReserved2;
public IntPtr lpReserved2;
public IntPtr hStdInput;
public IntPtr hStdOutput;
public IntPtr hStdError;
}
[StructLayout(LayoutKind.Sequential)] public struct PROCESS_INFORMATION
{
public IntPtr hProcess;
public IntPtr hThread;
public uint dwProcessId;
public uint dwThreadId;
}
[StructLayout(LayoutKind.Sequential)] public struct SECURITY_ATTRIBUTES
{
public int Length;
public IntPtr lpSecurityDescriptor;
public bool bInheritHandle;
}
[DllImport("kernel32.dll", EntryPoint="CloseHandle", SetLastError=true, CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
public extern static bool CloseHandle(IntPtr handle);
[DllImport("advapi32.dll", EntryPoint="CreateProcessAsUser", SetLastError=true, CharSet=CharSet.Ansi, CallingConvention=CallingConvention.StdCall)]
public extern static bool CreateProcessAsUser(IntPtr hToken, String lpApplicationName, String lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes,
ref SECURITY_ATTRIBUTES lpThreadAttributes, bool bInheritHandle, int dwCreationFlags, IntPtr lpEnvironment,
String lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation);
[DllImport("advapi32.dll", EntryPoint="DuplicateTokenEx")]
public extern static bool DuplicateTokenEx(IntPtr ExistingTokenHandle, uint dwDesiredAccess,
ref SECURITY_ATTRIBUTES lpThreadAttributes, int TokenType,
int ImpersonationLevel, ref IntPtr DuplicateTokenHandle);
Solution Explorer'da (Çözüm Gezgini), WebForm1.aspx dosyasını sağ tıklatın ve sonra da Aç ' ı tıklatın. Web formu Tasarım görünümünde açar.
Görünüm menüsünden HTML kaynağı ' nı tıklatın.
HTML kaynak penceresini, varolan tüm kodu aşağıdaki kodla değiştirin.
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Q889251.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<P> </P>
<P>Enter Path of process to be run (with relevant parameters)
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox></P>
<P>
<asp:Button id="Button1" runat="server" Text="CreateProcess"></asp:Button>
</P>
<P>
<asp:Label id="Label1" runat="server">Status:</asp:Label></P>
<P>
<asp:Label id="Label2" runat="server">Impersonated Identity:</asp:Label></P>
</form>
</body>
</HTML>
Görünüm menüsünde tasarımı tıklatın.
CreateProcess</a1> çift tıklatın. Button1_Click yöntemi kod eklenir ve kod içerik bölmesinde görüntülenir.
Varolan Button1_Click yöntemi aşağıdaki kodla değiştirin.
private void Button1_Click(object sender, System.EventArgs e)
{
IntPtr Token = new IntPtr(0);
IntPtr DupedToken = new IntPtr(0);
bool ret;
Label2.Text+=WindowsIdentity.GetCurrent().Name.ToString();
SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES();
sa.bInheritHandle = false;
sa.Length = Marshal.SizeOf(sa);
sa.lpSecurityDescriptor = (IntPtr)0;
Token = WindowsIdentity.GetCurrent().Token;
const uint GENERIC_ALL = 0x10000000;
const int SecurityImpersonation = 2;
const int TokenType = 1;
ret = DuplicateTokenEx(Token, GENERIC_ALL, ref sa, SecurityImpersonation, TokenType, ref DupedToken);
if (ret == false)
Label1.Text +="DuplicateTokenEx failed with " + Marshal.GetLastWin32Error();
else
Label1.Text+= "DuplicateTokenEx SUCCESS";
STARTUPINFO si = new STARTUPINFO();
si.cb = Marshal.SizeOf(si);
si.lpDesktop = "";
string commandLinePath;
commandLinePath = TextBox1.Text;
PROCESS_INFORMATION pi = new PROCESS_INFORMATION();
ret = CreateProcessAsUser(DupedToken,null,commandLinePath, ref sa, ref sa, false, 0, (IntPtr)0, "c:\\", ref si, out pi);
if (ret == false)
Label1.Text +="CreateProcessAsUser failed with " + Marshal.GetLastWin32Error();
else
{
Label1.Text +="CreateProcessAsUser SUCCESS. The child PID is" + pi.dwProcessId;
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
ret = CloseHandle(DupedToken);
if (ret == false)
Label1.Text+=Marshal.GetLastWin32Error();
else
Label1.Text+="CloseHandle SUCCESS";
}
Yapı) menüsünde, Build Solution ' ı tıklatın.
Hata Ayıkla) menüsünde, Başlat ' ı tıklatın.
WebForm1 sayfasında, bir işlem başlatmak istediğiniz yolu yazın. Örneğin, SystemDriver \Windows\Notepad.exe yazın.
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
306158
(http://support.microsoft.com/kb/306158/
)
ASP.NET uygulamasında kimliğe bürünme nasıl uygulanır (Bu bağlantı, bir kısmı veya tamamı İngilizce olan içeriğe işaret edebilir.)
321748
(http://support.microsoft.com/kb/321748/
)
Yerel bir Web sunucusu ASP.NET uygulamaları oluşturma hakkında
842790
(http://support.microsoft.com/kb/842790/
)
Bir ASP.NET Web uygulaması ikincil bir iş parçacığı bir kullanıcının kimliğine bürünmek çalıştığınızda System.Security.SecurityException bir özel durum oluşur.
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:889251
(http://support.microsoft.com/kb/889251/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.