如何利用C++ Builder获取系统的sid信息?
2013-10-20 23:41
489 查看
头文件代码:
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; TEdit *Edit1; TLabel *Label1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
实现文件代码:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <stdio.h> #include "Unit1.h" #define MAX_NAME 256 //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void ConvertSid(PSID pSid, LPTSTR TextualSid) { PSID_IDENTIFIER_AUTHORITY psia = GetSidIdentifierAuthority(pSid); DWORD sidLen = sprintf(TextualSid, TEXT("S-%lu-"), SID_REVISION); sidLen += sprintf(TextualSid + strlen(TextualSid), TEXT("%lu"), psia->Value[5]); int i = 0; int subAuthorities = *GetSidSubAuthorityCount(pSid); for (i = 0; i < subAuthorities; i++) { sidLen += sprintf(TextualSid + sidLen, TEXT("-%lu"), *GetSidSubAuthority(pSid, i)); } } void GetLocalSid(LPTSTR szSid) { char szUserName[MAX_NAME] = {0}; DWORD nameSize = sizeof(szUserName) ; GetUserName(szUserName, &nameSize); char szUserSid[MAX_NAME] = {0}; char szUserDomain[MAX_NAME] = {0}; DWORD sidSize = sizeof(szUserSid); DWORD domainSize = sizeof(szUserDomain); SID_NAME_USE snu; LookupAccountName( NULL, szUserName, (PSID)szUserSid, &sidSize, szUserDomain, &domainSize, &snu ); ConvertSid(szUserSid, szSid); } void __fastcall TForm1::Button1Click(TObject *Sender) { char szSid[MAX_NAME] = {0}; GetLocalSid(szSid); Edit1->Text = szSid; Edit1->SetFocus(); } //---------------------------------------------------------------------------
相关文章推荐
- 如何用C语言获取系统的sid信息?
- SQL 利用INFORMATION_SCHEMA系统视图如何一步一步获取表的主外键信息
- 如何利用Java获取系统的信息(CPU、内存、各盘符使用情况)
- 如何利用Java获取系统的信息(CPU、内存、各盘符使用情况)
- 探讨SQL利用INFORMATION_SCHEMA系统视图如何获取表的主外键信息
- SQL 利用INFORMATION_SCHEMA系统视图如何一步一步获取表的主外键信息
- 探讨SQL利用INFORMATION_SCHEMA系统视图如何获取表的主外键信息
- 利用GetObject("WinMgmts:")获取系统信息
- 【原】基础篇:第十二篇,Ext组件系列之--如何获取后台返回的自定义错误信息和系统异常信息
- 利用Windows API函数和注册表获取系统信息
- 如何获取系统的应用程序的相关信息
- 如何获取和利用“用户及其使用网站原因的信息”
- 利用WMI获取系统的软硬件信息的学习与总结
- Android获取系统的硬件信息、系统版本以及如何检测ROM类型
- 如何用帮助系统获取PowerShell可用命令信息
- 如何获取系统的应用程序的相关信息
- 通过系统广播,获得apk的packageName以后,如何仅通过packageName获取其他信息
- c#中如何获取本机MAC地址、IP地址、硬盘ID、CPU序列号等系统信息
- Script-VBS-利用GetObject(WinMgmts)获取系统信息
- spring利用扫描方式对bean的处理(对任何版本如何获取xml配置信息的处理)