use winapi::shared::minwindef::DWORD; use winapi::shared::ntdef::{LPCWSTR, LPWSTR, PVOID}; ENUM!{enum TAG_INFO_LEVEL { eTagInfoLevelNameFromTag = 1, eTagInfoLevelNamesReferencingModule = 2, eTagInfoLevelNameTagMapping = 3, eTagInfoLevelMax = 4, }} ENUM!{enum TAG_TYPE { eTagTypeService = 1, eTagTypeMax = 2, }} STRUCT!{struct TAG_INFO_NAME_FROM_TAG_IN_PARAMS { dwPid: DWORD, dwTag: DWORD, }} pub type PTAG_INFO_NAME_FROM_TAG_IN_PARAMS = *mut TAG_INFO_NAME_FROM_TAG_IN_PARAMS; STRUCT!{struct TAG_INFO_NAME_FROM_TAG_OUT_PARAMS { eTagType: DWORD, pszName: LPWSTR, }} pub type PTAG_INFO_NAME_FROM_TAG_OUT_PARAMS = *mut TAG_INFO_NAME_FROM_TAG_OUT_PARAMS; STRUCT!{struct TAG_INFO_NAME_FROM_TAG { InParams: TAG_INFO_NAME_FROM_TAG_IN_PARAMS, OutParams: TAG_INFO_NAME_FROM_TAG_OUT_PARAMS, }} pub type PTAG_INFO_NAME_FROM_TAG = *mut TAG_INFO_NAME_FROM_TAG; STRUCT!{struct TAG_INFO_NAMES_REFERENCING_MODULE_IN_PARAMS { dwPid: DWORD, pszModule: LPWSTR, }} pub type PTAG_INFO_NAMES_REFERENCING_MODULE_IN_PARAMS = *mut TAG_INFO_NAMES_REFERENCING_MODULE_IN_PARAMS; STRUCT!{struct TAG_INFO_NAMES_REFERENCING_MODULE_OUT_PARAMS { eTagType: DWORD, pmszNames: LPWSTR, }} pub type PTAG_INFO_NAMES_REFERENCING_MODULE_OUT_PARAMS = *mut TAG_INFO_NAMES_REFERENCING_MODULE_OUT_PARAMS; STRUCT!{struct TAG_INFO_NAMES_REFERENCING_MODULE { InParams: TAG_INFO_NAMES_REFERENCING_MODULE_IN_PARAMS, OutParams: TAG_INFO_NAMES_REFERENCING_MODULE_OUT_PARAMS, }} pub type PTAG_INFO_NAMES_REFERENCING_MODULE = *mut TAG_INFO_NAMES_REFERENCING_MODULE; STRUCT!{struct TAG_INFO_NAME_TAG_MAPPING_IN_PARAMS { dwPid: DWORD, }} pub type PTAG_INFO_NAME_TAG_MAPPING_IN_PARAMS = *mut TAG_INFO_NAME_TAG_MAPPING_IN_PARAMS; STRUCT!{struct TAG_INFO_NAME_TAG_MAPPING_ELEMENT { eTagType: DWORD, dwTag: DWORD, pszName: LPWSTR, pszGroupName: LPWSTR, }} pub type PTAG_INFO_NAME_TAG_MAPPING_ELEMENT = *mut TAG_INFO_NAME_TAG_MAPPING_ELEMENT; STRUCT!{struct TAG_INFO_NAME_TAG_MAPPING_OUT_PARAMS { cElements: DWORD, pNameTagMappingElements: PTAG_INFO_NAME_TAG_MAPPING_ELEMENT, }} pub type PTAG_INFO_NAME_TAG_MAPPING_OUT_PARAMS = *mut TAG_INFO_NAME_TAG_MAPPING_OUT_PARAMS; STRUCT!{struct TAG_INFO_NAME_TAG_MAPPING { InParams: TAG_INFO_NAME_TAG_MAPPING_IN_PARAMS, pOutParams: PTAG_INFO_NAME_TAG_MAPPING_OUT_PARAMS, }} pub type PTAG_INFO_NAME_TAG_MAPPING = *mut TAG_INFO_NAME_TAG_MAPPING; EXTERN!{extern "system" { fn I_QueryTagInformation( pszMachineName: LPCWSTR, eInfoLevel: TAG_INFO_LEVEL, pTagInfo: PVOID, ) -> DWORD; }} FN!{stdcall PQUERY_TAG_INFORMATION( pszMachineName: LPCWSTR, eInfoLevel: TAG_INFO_LEVEL, pTagInfo: PVOID, ) -> DWORD}