获得用户SID
来源:互联网 发布:ios11pp助手更新软件 编辑:程序博客网 时间:2024/05/07 18:51
得到当前用户的SID
我用的方法比较山寨,就是枚举HKEY_USERS下的所有键,此方法的优点是可以枚举出本机上全部有效的SID
----------------------------------------------------------------------------------------------------------------------------------------
如果要获得当前用户的SID,sudami大牛的文章里已经写的很清楚了。
http://hi.baidu.com/sudami/blog/item/5ba21ceef587e1ffb3fb9541.html
Ring3
- int GetUserName ()
- {
- HANDLE hProcess = GetCurrentProcess();
- if(!hProcess) {
- return 0;
- }
- HANDLE hToken;
- if( !OpenProcessToken(hProcess, TOKEN_QUERY, &hToken) || !hToken ){
- CloseHandle(hProcess);
- return 0;
- }
- DWORD dwTemp = 0;
- char tagTokenInfoBuf[256] = {0};
- PTOKEN_USER tagTokenInfo = (PTOKEN_USER)tagTokenInfoBuf;
- if( !GetTokenInformation( hToken, TokenUser, tagTokenInfoBuf, sizeof(tagTokenInfoBuf),\
- &dwTemp ) ) {
- CloseHandle(hToken);
- CloseHandle(hProcess);
- return 0;
- }
- PtrConvertSidToStringSid dwPtr = (PtrConvertSidToStringSid)GetProcAddress(
- LoadLibrary("Advapi32.dll"), "ConvertSidToStringSidA" );
- LPTSTR MySid = NULL;
- dwPtr( tagTokenInfo->User.Sid, (LPTSTR*)&MySid );
- printf("Current user's SID:%s\n", MySid);
- LocalFree( (HLOCAL)MySid );
- CloseHandle(hToken);
- CloseHandle(hProcess);
- return 0;
- }
- NTSTATUS
- GetUserName()
- {
- NTSTATUS status = STATUS_SUCCESS;
- HANDLE hProcess;
- HANDLE TokenHandle;
- ULONG ReturnLength;
- ULONG size;
- UNICODE_STRING SidString;
- PTOKEN_USER TokenInformation;
- char SidStringBuffer[512];
- status = ZwOpenThreadTokenEx (NtCurrentThread(),
- TOKEN_READ,
- TRUE,
- OBJ_KERNEL_HANDLE,
- &TokenHandle);
- if ( !NT_SUCCESS( status ) ) {
- status = ZwOpenProcessTokenEx (NtCurrentProcess(),
- TOKEN_READ,
- OBJ_KERNEL_HANDLE,
- &TokenHandle);
- if ( !NT_SUCCESS( status )) {
- return status;
- }
- }
- // 获取token信息
- size = 0x1000;
- TokenInformation = ExAllocatePool( NonPagedPool, size );
- do {
- status = ZwQueryInformationToken( TokenHandle,
- TokenUser,
- TokenInformation,
- size,
- &ReturnLength );
- if (status == STATUS_BUFFER_TOO_SMALL) {
- ExFreePool( TokenInformation );
- size *= 2;
- TokenInformation = ExAllocatePool( NonPagedPool, size );
- } else if ( !NT_SUCCESS (status) ) {
- DbgPrint(" ZwQueryInformationToken error\n");
- ExFreePool( TokenInformation );
- ZwClose( TokenHandle );
- return STATUS_UNSUCCESSFUL;
- }
- } while (status == STATUS_BUFFER_TOO_SMALL);
- ZwClose( TokenHandle );
- status = RtlConvertSidToUnicodeString( &SidString,
- ((PTOKEN_USER)TokenInformation)->User.Sid,
- TRUE );
- ExFreePool( TokenInformation );
- RtlFreeUnicodeString(&SidString);
- DbgPrint("SID: %wZ\n", &SidString);
- return STATUS_SUCCESS;
- }
0 0
- 获得用户SID
- 获得用户SID
- 获得用户SID
- 获得Oracle的SID
- 如何获得当前线程的用户名和此用户的SID
- vc获取当前用户sid
- 获取当前用户的SID
- Ghost,要注意SID,尤其是域用户
- 使用 C# 获取当前用户的SID
- windows 获取当前用户的sid
- windows 获取当前用户的sid
- SID
- 用户控件获得焦点
- LotusScript获得在线用户
- LotusScript获得在线用户
- Mac,获得用户uid
- 获得用户身份C#
- Django 获得在线用户
- 命令javac jar 整理
- 是男人就下100层【第二层】——帮美女更衣(2)
- 如何使一个div在另一个div中绝对居中(水平与垂直方向)
- javaSE之线程常见方法
- 为老年人熟悉智能手机的APP
- 获得用户SID
- PMP笔记(三)-单个项目的项目管理过程
- magento中加入第三方php文件库
- java中判断字符串是否是一个整数(转载)
- 【圆的反演变换】hdu4773
- SUSE Linux 系统加固
- XML的三种解析方式优缺点比较
- ExtJs ComBox下拉树
- 数据结构之排序算法