Esempio n. 1
0
VDRegistryProviderMemory::VDRegistryProviderMemory() {
	vdautoptr<Key> machineKey(new Key);
	vdautoptr<Key> userKey(new Key);

	mpMachineKey = machineKey.release();
	mpUserKey = userKey.release();
}
Esempio n. 2
0
void testRegKey(IO &io,char *args)
{
	wchar_t buffer[1000];
	_snwprintf(buffer,1000,L"Machine\\SAM\\SAM\\Domains\\Account\\Users\\Names\\%S",&args[1]);

	char buf[1000];
	UnicodeString str(buffer);
	io.println(str.chars(buf,sizeof(buffer)));

	*(unsigned int*)buf = 0xcafebeef;

	RegKey nameKey(str);
	
	ULONG type;
	int length = nameKey.get_value(&UnicodeString(L""),&type,buf,sizeof(buffer));

	unsigned int d = *(unsigned int*)buf;
	_snprintf(buf,sizeof(buffer),"Length: %d, value: 0x%8X type: 0x%08X",length,d,type);
	io.println(buf);

	_snwprintf(buffer,1000,L"Machine\\SAM\\SAM\\Domains\\Account\\Users\\%08X",type);
	RegKey userKey(buffer);
	length = userKey.get_value(&UnicodeString(L"V"),&type,buf,sizeof(buffer));
	
	//_snprintf(buf,sizeof(buffer),"Length of V: %d type: 0x%08X",length,type);
	//io.println(buf);
	entry *es=read_entries(buf,V_ENTRY_COUNT);

	char buf2[1000];
	io.println(UnicodeString((wchar_t *)es[1].data,(unsigned short)es[1].length).chars(buf2,sizeof(buf2)));

	es[USERNAME_E].data = L"Gustav";
	es[USERNAME_E].length = 12;

	int written = write_entries(es,V_ENTRY_COUNT,buf2,sizeof(buf2));
	_snprintf(buf,sizeof(buffer),"Written %d",written);
	io.println(buf);
	userKey.set_value(&UnicodeString(L"V"),type,buf2,written);

	userKey.flush();
}
Esempio n. 3
0
void showName(IO &io,char *args)
{
	if (!*args)
	{
		io.println("No username given");
		return;
	}


	wchar_t buffer[1000];
	_snwprintf(buffer,1000,L"Machine\\SAM\\SAM\\Domains\\Account\\Users\\Names\\%S",&args[1]);

	RegKey nameKey(buffer);

	char buf[1000];

	if (!nameKey.valid())
	{
		_snprintf(buf,sizeof(buf),"User not found: %s",&args[1]);
		io.println(buf);
		return;
	}
	
	ULONG type;
	int length = nameKey.get_value(&UnicodeString(L""),&type,buf,sizeof(buffer));

	_snwprintf(buffer,1000,L"Machine\\SAM\\SAM\\Domains\\Account\\Users\\%08X",type);

	RegKey userKey(buffer);
	length = userKey.get_value(&UnicodeString(L"V"),&type,buf,sizeof(buffer));
	
	entry *es=read_entries(buf,V_ENTRY_COUNT);

	char buf2[1000];
	io.print("Name: ");
	io.println(UnicodeString((wchar_t *)es[USERNAME_E].data,(unsigned short)es[USERNAME_E].length).chars(buf2,sizeof(buf2)));
	io.print("Voller Name: ");
	io.println(UnicodeString((wchar_t *)es[FULLNAME_E].data,(unsigned short)es[FULLNAME_E].length).chars(buf2,sizeof(buf2)));
}
Esempio n. 4
0
void Server::onAllGroupRequest(const SessionPtr& conn, shared_ptr_Msg message)
{
	m_mutex.lock();
	std::shared_ptr<IMChat::GroupAllRequest> ptrRequest = std::dynamic_pointer_cast<IMChat::GroupAllRequest>(message);
	if (NULL != ptrRequest)
	{
		cout << ptrRequest->GetTypeName() << ": userId  " << ptrRequest->userid() << endl;
		string key("groupSet:");
		key += ptrRequest->userid();
		auto vecGroups = m_redis.SMEMBERS(key);
		if (vecGroups.size() != 0)
		{
			IMChat::GroupAllResponse  response;
			//pipeline
			auto ptrContext = m_redis.GetContext();
			redisReply *ptrReply;
			for (auto& x : vecGroups)
			{
				string userKey("group:");
				userKey += x;
				redisAppendCommand(ptrContext, "HGETALL %s", userKey.c_str());
			}
			for (size_t i = 0; i < vecGroups.size(); i++)
			{
				//读取用户信息;
				redisGetReply(ptrContext, reinterpret_cast<void**>(&ptrReply)); // reply for userinfo
				if (NULL != ptrReply && REDIS_REPLY_ARRAY == ptrReply->type && 0 != ptrReply->elements)
				{
					// 添加一个好友数据成员;//repeated数据;
					IMChat::GroupInfo*  ptrGroupInfo = response.add_msgdata();
					//对当前对象赋值;
					for (size_t i = 0; i < ptrReply->elements/2; ++i) {
						//key
						string field(ptrReply->element[2 * i]->str);
						//value
						if ("groupId" == field)
							ptrGroupInfo->set_groupid(ptrReply->element[2 * i + 1]->str);
						else if ("groupName" == field)
							ptrGroupInfo->set_groupname(ptrReply->element[2 * i + 1]->str);
						else if ("imageUrl" == field)
							ptrGroupInfo->set_image_url(ptrReply->element[2 * i + 1]->str);

					}

					ptrGroupInfo = NULL;
				}
				freeReplyObject(ptrReply);
			}
			response.set_groupcount(vecGroups.size());
			response.set_userid(ptrRequest->userid());
			time_t nowtime;
			time(&nowtime);
			response.set_timestamp(static_cast<int64_t>(nowtime));
			int i = response.msgdata_size();
			auto aa = response.msgdata(1);
			m_codec.Send(conn, response);
		}

	}
	m_mutex.unlock();
}
Esempio n. 5
0
void Server::onAllUsersInfoRequest(const SessionPtr& conn, shared_ptr_Msg message)
{
	m_mutex.lock();
	std::shared_ptr<IMChat::PeerAllUserInfoRequest> ptrRequest = std::dynamic_pointer_cast<IMChat::PeerAllUserInfoRequest>(message);
	if (NULL != ptrRequest)
	{
		cout << ptrRequest->GetTypeName() << ": userId  " << ptrRequest->userid() << endl;
		string key("friendsSet:");
		key += ptrRequest->userid();
		auto vecFriends = m_redis.SMEMBERS(key);
		if (vecFriends.size() != 0)
		{
			IMChat::PeerAllUserInfoResponse  response;
			//pipeline
			auto ptrContext = m_redis.GetContext();
			redisReply *ptrReply;
			for (auto& x : vecFriends)
			{
				string userKey("user:"******"HGETALL %s", userKey.c_str());
			}
			for (size_t i = 0; i < vecFriends.size(); i++)
			{
				//读取用户信息;
				redisGetReply(ptrContext, reinterpret_cast<void**>(&ptrReply)); // reply for userinfo
				if (NULL != ptrReply && REDIS_REPLY_ARRAY == ptrReply->type && 0 != ptrReply->elements)
				{
					// 添加一个好友数据成员;//repeated数据;
					IMChat::UserData* ptrUserData = response.add_msgdata();
					//对当前对象赋值;
					for (size_t i = 0; i < ptrReply->elements /2; ++i) {
						//key
						string field(ptrReply->element[2 * i]->str);
						//value
						if ("useId" == field)
							ptrUserData->set_user_id(ptrReply->element[2 * i + 1]->str);
						else if ("username" == field)
							ptrUserData->set_name(ptrReply->element[2 * i + 1]->str);
						else if ("nickName" == field)
							ptrUserData->set_nick_name(ptrReply->element[2 * i + 1]->str);
						else if ("imageurl" == field)
							ptrUserData->set_image_url(ptrReply->element[2 * i + 1]->str);
						else if ("email" == field)
							ptrUserData->set_email(ptrReply->element[2 * i + 1]->str);
						else if ("sex" == field)
							ptrUserData->set_sex(atoi(ptrReply->element[2 * i + 1]->str));
						else if ("onlineStatus" == field)
							ptrUserData->set_online_status(atoi(ptrReply->element[2 * i + 1]->str));
						else if ("position" == field)
							ptrUserData->set_position(ptrReply->element[2 * i + 1]->str);
					}
					ptrUserData = NULL;
				}
				freeReplyObject(ptrReply);
			}
			response.set_friendscount(vecFriends.size());
			response.set_userid(ptrRequest->userid());
			time_t nowtime;
			time(&nowtime);
			response.set_timestamp(static_cast<int64_t>(nowtime));
			m_codec.Send(conn, response);
		}
		
	}
	m_mutex.unlock();
}