2016-08-23 98 views
1

我正在寫一個Windows服務這將使用數據庫使用系統配置文件名稱。對於此功能,我有一個Postgres SQL Server如何找出Windows系統配置文件的名稱?

我想創建trust認證爲Windows 系統配置文件之前,我運行服務。

爲此,我會跑會寫的pg_hba.conf文件,如身份驗證方法所需的信息,並與系統配置名創建角色的一些控制檯應用程序。順便說一句,Postgres可以識別其他語言符號是非常酷的(不知道它們是否全部)。

問題是我怎麼能找到翻譯Windows系統的配置文件的名字?原因在不同的語言每個Windows都有不同的系統配置文件名稱:系統системаSISTEMA

+0

「大多數服務不需要如此高的權限級別。如果您的服務不需要這些權限...考慮使用LocalService帳戶或NetworkServ冰帳戶。 「 - 來自https://msdn.microsoft.com/en-us/library/windows/desktop/ms684190(v=vs.85).aspx – MSalters

+0

@ MSalters,是的,不幸的是,我正在使用'QtService'任務及其命令'-i'不允許從我想要安裝服務的用戶中進行選擇(或者我可能沒有發現此功能)。當然,我可以通過'sc'命令從'cmd'安裝它但是這不是我想要的。 – someoneinthebox

+0

@ MSalters,oh no,my bad。有一種簡單的方法可以在'-i'鍵後用'NT <...>/'來使用另一個系統配置文件。 :網絡配置文件名稱 - PC名稱和本地配置文件名稱 - 帶空格的名稱,我無法在Postgres中註冊它們。 – someoneinthebox

回答

3

所以,解決了WinAPI的問題:

#include <windows.h> 

<...> 

static const DWORD MAX_BUFF_SIZE = 256; 
SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY; 
PSID pSid = NULL; 
SID_NAME_USE use;  
wchar_t buffName[MAX_BUFF_SIZE]; // Here would be name 
DWORD buffNameSize = MAX_BUFF_SIZE; 
wchar_t buffDomain[MAX_BUFF_SIZE]; 
DWORD buffDomainSize = MAX_BUFF_SIZE; 

AllocateAndInitializeSid(&auth, 1, SECURITY_LOCAL_SYSTEM_RID, 0, 0, 0, 0, 0, 0, 0, &pSid); 
LookupAccountSid(NULL, pSid, buffName, &buffNameSize, buffDomain, &buffDomainSize, &use); 

FreeSid(pSid); 

<...> 
相關問題