我需要製作一個程序,用於從文本文件中讀取數據,並根據文本文件中的特定數據更改程序狀態,其中我的程序需要讀取,寫入和讀取權限創建一個文本文件。防止用戶刪除,修改,分機
我希望防止用戶或其他軟件刪除,修改或複製文件。我將如何開始實施這個?
我需要製作一個程序,用於從文本文件中讀取數據,並根據文本文件中的特定數據更改程序狀態,其中我的程序需要讀取,寫入和讀取權限創建一個文本文件。防止用戶刪除,修改,分機
我希望防止用戶或其他軟件刪除,修改或複製文件。我將如何開始實施這個?
您可以通過三種方式實現這一目標:
1)一旦應用程序開始讓你的文件句柄,並鎖定該文件。如果應用程序始終運行(例如作爲服務),這當然只能工作
2)調整文件安全性選項卡中的權限並將其設置爲只讀。爲寫入權限創建技術用戶(在域中最佳)。在使用impersionation(WindowsImpersonationContext)時,用技術用戶在程序中打開文件。使用將是簡單:
using (new Impersonation(domain, username, password))
{
// do whatever you want
}
樣品類,將讓你一個WindowsImpersonationContext(應該像一個魅力):
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
public class Impersonation : IDisposable
{
private readonly SafeTokenHandle _handle;
private readonly WindowsImpersonationContext _context;
const int LOGON32_LOGON_NEW_CREDENTIALS = 9;
public Impersonation(string domain, string username, string password)
{
var ok = LogonUser(username, domain, password,
LOGON32_LOGON_NEW_CREDENTIALS, 0, out this._handle);
if (!ok)
{
var errorCode = Marshal.GetLastWin32Error();
throw new ApplicationException(string.Format("Could not impersonate the elevated user. LogonUser returned error code {0}.", errorCode));
}
this._context = WindowsIdentity.Impersonate(this._handle.DangerousGetHandle());
}
public void Dispose()
{
this._context.Dispose();
this._handle.Dispose();
}
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, out SafeTokenHandle phToken);
public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid
{
private SafeTokenHandle()
: base(true) { }
[DllImport("kernel32.dll")]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[SuppressUnmanagedCodeSecurity]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool CloseHandle(IntPtr handle);
protected override bool ReleaseHandle()
{
return CloseHandle(handle);
}
}
}
的另一種嘗試(包括使用)如下所示:Open a shared file under another user and domain?
3)顯然作爲擁有訪問權限的其他用戶運行該程序 - 所有其他用戶擁有隻讀權限(在註冊爲服務或使用runas/user命令時使用技術用戶)
好的會嘗試謝謝 – naheiwProg
您可以使用特定訪問條件(https://msdn.microsoft.com/de-de/library/s67691sb(v=vs.110).aspx)打開文件。 如果您在此拒絕特權,應用程序將無法修改數據。 爲了清楚說明,您的應用程序訪問權限是隻讀的,您無法對其進行修改。
防止其他應用程序或用戶刪除/修改/無論您的文本文件在C#中是不可能的。您可以限制文件系統中的權限,但僅此而已。
如果這很重要,那麼你應該重新考慮你的實現。 C#在您的應用程序配置中提供了實例或應用程序特定參數的資源文件。
嘗試詳細說明,顯示一些樣本等。現在你完全不清楚你在問什麼,你的問題是什麼。 –
讓我改述一下,以確保我明白:您的軟件從配置文件中讀取數據,並且要確保沒有人篡改該文件。那是對的嗎? –
我想他是在找那個安德烈。你到現在爲止嘗試過什麼? – Gino