• 序列号序列号


    主板序列号

            string str;
            str = bios.GetSystemSerialNumber();  //wentai
     
            //str1 = bios.GetSystemECSerialNumber();
            //CLogHelp::ITCLog(str1);
     
            LocalSN = str.c_str();
            str = bios.GetSystemVersion();
            LocalMode = str.c_str();
     
            string str1;
            str1 = bios.GetSystemSerialNumber();
            CLogHelp::ITCLog(str1);
     
            str1 = bios.GetSystemSKUNumber();
            CLogHelp::ITCLog(str1);
            str1 = bios.GetSystemECSerialNumber();
            CLogHelp::ITCLog(str1);
     
            str1 = bios.GetSystemECVersion();
            CLogHelp::ITCLog(str1);
     
            str1 = bios.GetSystemProductName();
            CLogHelp::ITCLog(str1);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    void CSMBiosTable::ParseSMBiosStructure( unsigned char * pInBuf, int nInBufLen )
    {
    	int i = 0;
    	while( i+1 < nInBufLen )
    	{
    		unsigned char cType = pInBuf[i];
    		unsigned char cLength = pInBuf[i+1];
    		if( i+cLength >= nInBufLen )
    			break;
     
    //		BASE_LOG_OUT(( P2SP_LOG, " i+cLength = %d  nInBufLen-i-cLength=%d beg\n", i+cLength, nInBufLen-i-cLength ));
    		int end = FindStringRegionEnd( &pInBuf[i+cLength], nInBufLen-i-cLength );
    //		BASE_LOG_OUT(( P2SP_LOG, " i+cLength = %d  nInBufLen-i-cLength=%d\n", i+cLength, nInBufLen-i-cLength ));
    		if( end == -1 )//已经到结尾
    		{
    //			BASE_LOG_OUT(( P2SP_LOG, "break\n" ));
    			break;
    		}
     
    		PSMBiosStructureBuffer structBuffer = GetStructureBuffer( cType );
    		if( structBuffer != NULL )
    		{
    			if( structBuffer->m_pStructureBuffer == NULL )//第一个 buffer 对象已经生成 通过其buffer成员 判断是否被使用
    			{
    				structBuffer->m_pStructureBuffer = new unsigned char[cLength+end];
    				memcpy_s( structBuffer->m_pStructureBuffer, cLength+end, &pInBuf[i], cLength+end );
    				structBuffer->m_nStructureBufferLen = cLength+end;
    			}
    			else//接下来的通过成员 m_next 来判断对象是否生成且使用
    			{
    				while( structBuffer->m_next != NULL )
    	    			structBuffer = structBuffer->m_next;
     
    				PSMBiosStructureBuffer tempStructBuffer = new SSMBiosStructureBuffer;
    				tempStructBuffer->m_cType = cType;
    				tempStructBuffer->m_pStructureBuffer = new unsigned char[cLength+end];
    				memcpy_s( tempStructBuffer->m_pStructureBuffer, cLength+end, &pInBuf[i], cLength+end );
    				tempStructBuffer->m_nStructureBufferLen = cLength+end;
    				structBuffer->m_next = tempStructBuffer;
    			}
    		}
    //		BASE_LOG_OUT(( P2SP_LOG, " i = %d\n", i ));
    		i = i + cLength + end;
    //		BASE_LOG_OUT(( P2SP_LOG, " i = %d end\n", i ));
    	}
    //	BASE_LOG_OUT(( P2SP_LOG, "end\n" ));
    }
    int  CSMBiosTable::FindStringRegionEnd( const unsigned char * pBegin, const unsigned int nLen )
    {
    	int nCurPos = 0;
    	while( nCurPos+1 < nLen )
    	{
    		if( pBegin[nCurPos] == '\0' && pBegin[nCurPos+1] == '\0' )
    		{
    			return (nCurPos+2);
    		}
    		else
    		{
    			nCurPos++;
    		}
    	}
    	return -1;
    }
     
    void CSMBiosTable::ClearSMBiosStructureBuffer()
    {
    	size_t size = m_vStructureBuffers.size();
    	for( size_t i = 0; i < size; i++ )
    	{
    		PSMBiosStructureBuffer structBuffer = m_vStructureBuffers[i];
    		if( structBuffer != NULL )
    			delete structBuffer;
    	}
    	m_vStructureBuffers.clear();
    }
    bool CSMBiosTable::FetchSMBiosDataByCom( unsigned char ** p )
    {
    	BOOL bRet = FALSE;   
    	HRESULT hres;   
     
    	// Initialize COM.    
    	hres =  CoInitializeEx( 0, COINIT_MULTITHREADED );    
    	if( FAILED(hres) )   
    	{   
    		return FALSE;              // Program has failed.    
    	}   
     
    	// Obtain the initial locator to Windows Management    
    	// on a particular host computer.    
    	IWbemLocator *pLoc = 0;   
    	hres = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc );   
    	if( FAILED(hres) )   
    	{   
    		CoUninitialize();   
    		return FALSE;       // Program has failed.    
    	}   
     
    	IWbemServices *pSvc = 0;   
     
    	// Connect to the root\cimv2 namespace with the    z
    	// current user and obtain pointer pSvc    
    	// to make IWbemServices calls.    
    	hres = pLoc->ConnectServer(
    		_bstr_t(L"ROOT\\WMI"), // WMI namespace    
    		NULL,                    // User name    
    		NULL,                    // User password    
    		0,                       // Locale    
    		NULL,                    // Security flags                     
    		0,                       // Authority           
    		0,                       // Context object    
    		&pSvc                    // IWbemServices proxy    
    		);                                 
     
    	if( FAILED(hres) )   
    	{   
    		pLoc->Release();        
    		CoUninitialize();   
    		return FALSE;                // Program has failed.    
    	}   
     
    	// Set the IWbemServices proxy so that impersonation    
    	// of the user (client) occurs.    
    	hres = CoSetProxyBlanket(   
    		pSvc,                         // the proxy to set    
    		RPC_C_AUTHN_WINNT,            // authentication service    
    		RPC_C_AUTHZ_NONE,             // authorization service    
    		NULL,                         // Server principal name    
    		RPC_C_AUTHN_LEVEL_CALL,       // authentication level    
    		RPC_C_IMP_LEVEL_IMPERSONATE,  // impersonation level    
    		NULL,                         // client identity     
    		EOAC_NONE                     // proxy capabilities         
    		);   
     
    	if( FAILED(hres) )   
    	{   
    		pSvc->Release();   
    		pLoc->Release();        
    		CoUninitialize();   
    		return FALSE;               // Program has failed.    
    	}   
     
    	IEnumWbemClassObject* pEnumerator = NULL;   
    	hres = pSvc->CreateInstanceEnum((const BSTR)L"MSSMBios_RawSMBiosTables", 0, NULL, &pEnumerator);
    	if( FAILED(hres) )   
    	{   
    		pSvc->Release();   
    		pLoc->Release();        
    		CoUninitialize();   
    		return FALSE;               // Program has failed.    
    	}   
    	else   
    	{    
    		do   
    		{   
    			IWbemClassObject* pInstance = NULL;   
    			ULONG dwCount = NULL;   
     
    			hres = pEnumerator->Next( WBEM_INFINITE, 1, &pInstance, &dwCount);         
    			if( SUCCEEDED(hres) )   
    			{   
    				VARIANT varBIOSData;   
    				VariantInit(&varBIOSData);   
    				CIMTYPE  type;   
     
    				hres = pInstance->Get(bstr_t("SmbiosMajorVersion"),0,&varBIOSData,&type,NULL);   
    				if( FAILED(hres) )   
    				{   
    					VariantClear(&varBIOSData);   
    				}   
    				else   
    				{   
    					m_smbiosbuffer.nSMBIOSMajorVersion = varBIOSData.iVal;   
    					VariantInit(&varBIOSData);   
    					hres = pInstance->Get( bstr_t("SmbiosMinorVersion"), 0, &varBIOSData, &type, NULL );   
    					if( FAILED(hres) )   
    					{   
    						VariantClear( &varBIOSData );   
    					}   
    					else   
    					{   
    						m_smbiosbuffer.nSMBIOSMinorVersion = varBIOSData.iVal;   
    						VariantInit(&varBIOSData);   
    						hres = pInstance->Get( bstr_t("SMBiosData"), 0, &varBIOSData, &type, NULL );   
    						if( SUCCEEDED(hres) )   
    						{   
    							if( ( VT_UI1 | VT_ARRAY  ) != varBIOSData.vt )   
    							{   
    							}   
    							else   
    							{   
    								SAFEARRAY           *parray = NULL;   
    								parray = V_ARRAY(&varBIOSData);   
    								BYTE* pbData = (BYTE*)parray->pvData;   
     
    								m_smbiosbuffer.nLength = parray->rgsabound[0].cElements;   
    								(*p) = new unsigned char[m_smbiosbuffer.nLength];   
    								memcpy_s( (*p), m_smbiosbuffer.nLength, pbData, m_smbiosbuffer.nLength );
    								bRet = TRUE;   
    							}   
    						}   
    						VariantClear( &varBIOSData );   
    					}   
    				}   
    				break;   
    			}   
     
    		}while( hres == WBEM_S_NO_ERROR );   
    	}   
     
    	// Cleanup    
    	// ========    
    	pSvc->Release();   
    	pLoc->Release();        
    	CoUninitialize();   
     
    	return bRet;  
    }
     
     
    typedef struct _UNICODE_STRING
    {
    	USHORT  Length;         //长度
    	USHORT  MaximumLength;  //最大长度
    	PCWSTR   Buffer;         //缓存指针,访问物理内存时,此处指向UNICODE字符串"\device\physicalmemory"
    }UNICODE_STRING,*PUNICODE_STRING;
     
     
    typedef struct _OBJECT_ATTRIBUTES 
    {
    	ULONG  Length;                   //长度 18h
    	HANDLE RootDirectory;            //  00000000
    	PUNICODE_STRING ObjectName;      //指向对象名的指针
    	ULONG Attributes;                //对象属性00000040h
    	PVOID SecurityDescriptor;        // Points to type SECURITY_DESCRIPTOR,0
    	PVOID SecurityQualityOfService;  // Points to type SECURITY_QUALITY_OF_SERVICE,0
    }OBJECT_ATTRIBUTES;
    typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;
     
    typedef DWORD  (__stdcall *ZWOS)(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
    typedef DWORD  (__stdcall *ZWMV)(HANDLE,HANDLE,PVOID,ULONG,ULONG,PLARGE_INTEGER,PSIZE_T,DWORD,ULONG,ULONG);
    typedef DWORD  (__stdcall *ZWUMV)(HANDLE,PVOID);
    typedef DWORD  (__stdcall *ZWCS)(HANDLE);
     
    #define NT_SUCCESS(Status)            ((NTSTATUS)(Status) >= 0)
    #define STATUS_INFO_LENGTH_MISMATCH        ((NTSTATUS)0xC0000004L)
    #define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)
     
    typedef LONG  NTSTATUS;
     
     
    bool CSMBiosTable::FetchSMBiosDataInXP32( unsigned char ** p )
    {
    	UNICODE_STRING  struniph;
    	struniph.Buffer        = L"\\device\\physicalmemory";
    	struniph.Length        = 0x2c;		//注意大小是按字节算
    	struniph.MaximumLength = 0x2e;	//也是字节
     
    	OBJECT_ATTRIBUTES obj_ar;
    	obj_ar.Attributes               =64;           //属性
    	obj_ar.Length                   =24;           //OBJECT_ATTRIBUTES类型的长度
    	obj_ar.ObjectName               =&struniph;    //指向对象的指针
    	obj_ar.RootDirectory            =0;
    	obj_ar.SecurityDescriptor       =0;
    	obj_ar.SecurityQualityOfService =0;
     
    	DWORD   ba       = 0;
    	LARGE_INTEGER so;
    	so.LowPart       = 0x000f0000;//物理内存的基址,就是f000:0000
    	so.HighPart      = 0x00000000;
    	SIZE_T ssize     = 0xffff;
     
    //	BASE_LOG_OUT(( P2SP_LOG, "LoadLibraryA\n" ));
    	HMODULE hinstLib = LoadLibraryA("ntdll.dll");
    	if( hinstLib == NULL )
    		return false;
     
    	ZWOS ZWopenS     = (ZWOS)GetProcAddress( hinstLib, "ZwOpenSection" );
    	ZWMV ZWmapV      = (ZWMV)GetProcAddress( hinstLib, "ZwMapViewOfSection" );
    	ZWUMV ZWunmapV   = (ZWUMV)GetProcAddress( hinstLib, "ZwUnmapViewOfSection" );
    	ZWCS  ZWcs       = (ZWCS)GetProcAddress( hinstLib, "ZwClose" );
    	if( ZWopenS == NULL || ZWmapV == NULL || ZWunmapV == NULL || ZWcs == NULL )
    		return false;
    	HANDLE hSection = NULL;
    //	BASE_LOG_OUT(( P2SP_LOG, "ZWopenS\n" ));
    	NTSTATUS status = ZWopenS( &hSection, 4, &obj_ar );
    	if( !NT_SUCCESS(status) )
    		return false;
    //	BASE_LOG_OUT(( P2SP_LOG, "ZWmapV\n" ));
    	status = ZWmapV( hSection, (HANDLE)0xffffffff, &ba, 0, 0xffff, &so, &ssize, 1, 0, 2 );
    	if( !NT_SUCCESS(status) )
    	{
    //		BASE_LOG_OUT(( P2SP_LOG, "ZWcs\n" ));
    		ZWcs( hSection );
    		return false;
    	}
    //	BASE_LOG_OUT(( P2SP_LOG, "memcpy_s\n" ));
    	*p = new unsigned char[ssize];
    	memcpy_s( (*p), ssize, (char*)ba, ssize );
    	m_smbiosbuffer.nLength = ssize;
    	//do something
    //	BASE_LOG_OUT(( P2SP_LOG, "ZWunmapV\n" ));
    	ZWunmapV( hSection, (PVOID)ba );
    //	BASE_LOG_OUT(( P2SP_LOG, "ZWcs\n" ));
    	ZWcs( hSection );
    //	BASE_LOG_OUT(( P2SP_LOG, "END\n"));
    	return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
  • 相关阅读:
    免费动态IP代理科普知识课堂—代理服务器的类型
    解锁工业 4.0 元宇宙:AR/VR、AI 和 3D 技术如何为下一次工业革命提供动力
    MySQL基础进阶:汇总数据
    2022年全网最全的Oracle数据库技术附练习题以及答案 循序渐进
    【pandas小技巧】--统计值作为新列
    前端URL拼接路径参数
    我们有一个新策划,请查收!
    【考研英语词汇训练营】Day 16 —— bankrupt,remain,regulate,construct,reflect
    认识线程栈与托管堆
    docker安装anaconda3 python环境
  • 原文地址:https://blog.csdn.net/vv1025/article/details/132744695