// extern crate winapi;
//
// use std::ffi::OsString;
// use std::iter::once;
// use std::os::windows::ffi::OsStrExt;
// use std::ptr;
// use std::ptr::null_mut;
// use winapi::shared::ntdef::NULL;
// use winapi::shared::wtypes::BSTR;
// use winapi::um::combaseapi::{CoInitializeEx, CoUninitialize, CoCreateInstance};
// use winapi::um::objbase::COINIT_APARTMENTTHREADED;
// use winapi::um::oaidl::VARIANT;
// use winapi::um::oleauto::{SysAllocString, SysFreeString, VariantClear};
// use winapi::um::wbemcli::{
//     IWbemClassObject, IWbemLocator, IWbemServices, WBEM_FLAG_FORWARD_ONLY, WBEM_INFINITE,
//     CLSID_WbemLocator, IID_IWbemLocator,
// };
// use winapi::um::wbemidl::IEnumWbemClassObject;
// use winapi::um::objidl::EOAC_NONE;
// use winapi::um::unknwnbase::IUnknown;
// use winapi::um::coml2api::COINIT_MULTITHREADED;
// use winapi::um::wbemidl::WBEM_FLAG_RETURN_IMMEDIATELY;
// use winapi::um::wbemidl::{IWbemLocatorVtbl, IWbemServicesVtbl};
// use winapi::um::wbemcli::WBEM_FLAG_BIDIRECTIONAL;
//
// pub fn get_uuid() -> Option<String> {
//     unsafe {
//         // 初始化 COM
//         let hr = CoInitializeEx(ptr::null_mut(), COINIT_APARTMENTTHREADED);
//         if hr < 0 {
//             println!("Failed to initialize COM library.");
//             return None;
//         }
//
//         // 创建 IWbemLocator 实例
//         let mut p_loc: *mut IWbemLocator = ptr::null_mut();
//         let hr = CoCreateInstance(
//             &CLSID_WbemLocator,
//             ptr::null_mut(),
//             1, // CLSCTX_INPROC_SERVER
//             &IID_IWbemLocator,
//             &mut p_loc as *mut *mut IWbemLocator as *mut *mut IUnknown,
//         );
//         if hr < 0 || p_loc.is_null() {
//             println!("Failed to create IWbemLocator object.");
//             CoUninitialize();
//             return None;
//         }
//
//         // 连接到 WMI
//         let mut p_svc: *mut IWbemServices = ptr::null_mut();
//         let hr = (*p_loc).ConnectServer(
//             SysAllocString(&OsString::from("ROOT\\CIMV2").encode_wide().chain(once(0)).collect::<Vec<u16>>().as_ptr()),
//             ptr::null_mut(),
//             ptr::null_mut(),
//             ptr::null_mut(),
//             0,
//             ptr::null_mut(),
//             ptr::null_mut(),
//             &mut p_svc,
//         );
//         if hr < 0 || p_svc.is_null() {
//             println!("Could not connect to WMI.");
//             (*p_loc).Release();
//             CoUninitialize();
//             return None;
//         }
//
//         // 设置 WMI 安全级别
//         let hr = (*p_svc).SetProxyBlanket(
//             p_svc as *mut IUnknown,
//             10, // RPC_C_AUTHN_WINNT
//             0,  // RPC_C_AUTHZ_NONE
//             NULL,
//             3,  // RPC_C_AUTHN_LEVEL_CALL
//             3,  // RPC_C_IMP_LEVEL_IMPERSONATE
//             NULL,
//             EOAC_NONE,
//         );
//         if hr < 0 {
//             println!("Could not set security levels.");
//             (*p_svc).Release();
//             (*p_loc).Release();
//             CoUninitialize();
//             return None;
//         }
//
//         // 使用 WQL 查询 UUID
//         let query = OsString::from("SELECT UUID FROM Win32_ComputerSystemProduct")
//             .encode_wide()
//             .chain(once(0))
//             .collect::<Vec<u16>>();
//         let mut p_enumerator: *mut IEnumWbemClassObject = ptr::null_mut();
//         let hr = (*p_svc).ExecQuery(
//             SysAllocString(&OsString::from("WQL").encode_wide().chain(once(0)).collect::<Vec<u16>>().as_ptr()),
//             SysAllocString(query.as_ptr()),
//             WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
//             ptr::null_mut(),
//             &mut p_enumerator,
//         );
//         if hr < 0 || p_enumerator.is_null() {
//             println!("Query for UUID failed.");
//             (*p_svc).Release();
//             (*p_loc).Release();
//             CoUninitialize();
//             return None;
//         }
//
//         // 获取查询结果
//         let mut p_class_obj: *mut IWbemClassObject = ptr::null_mut();
//         let mut return_count = 0;
//         let hr = (*p_enumerator).Next(
//             WBEM_INFINITE,
//             1,
//             &mut p_class_obj,
//             &mut return_count,
//         );
//         if return_count == 0 {
//             println!("No UUID found.");
//             (*p_enumerator).Release();
//             (*p_svc).Release();
//             (*p_loc).Release();
//             CoUninitialize();
//             return None;
//         }
//
//         // 从对象中提取 UUID 属性
//         let mut vt_prop: VARIANT = std::mem::zeroed();
//         let hr = (*p_class_obj).Get(
//             SysAllocString(&OsString::from("UUID").encode_wide().chain(once(0)).collect::<Vec<u16>>().as_ptr()),
//             0,
//             &mut vt_prop,
//             ptr::null_mut(),
//             ptr::null_mut(),
//         );
//         if hr < 0 {
//             println!("Failed to get UUID.");
//             VariantClear(&mut vt_prop);
//             (*p_class_obj).Release();
//             (*p_enumerator).Release();
//             (*p_svc).Release();
//             (*p_loc).Release();
//             CoUninitialize();
//             return None;
//         }
//
//         // 获取 UUID 字符串
//         let uuid_bstr: BSTR = vt_prop.bstrVal();
//         let uuid_string = OsString::from_wide(std::slice::from_raw_parts(uuid_bstr, wcslen(uuid_bstr)))
//             .to_string_lossy()
//             .into_owned();
//
//         // 清理资源
//         VariantClear(&mut vt_prop);
//         (*p_class_obj).Release();
//         (*p_enumerator).Release();
//         (*p_svc).Release();
//         (*p_loc).Release();
//         CoUninitialize();
//
//         Some(uuid_string)
//     }
// }
//
// fn wcslen(s: *const u16) -> usize {
//     let mut len = 0;
//     unsafe {
//         while *s.offset(len as isize) != 0 {
//             len += 1;
//         }
//     }
//     len
// }