Битая ссылка, , уникальный идентификатор, guid

Фуннкции для работы с GUID

CoCreateGUID

Функция CoCreateGuid принимает указатель структуру GUID и заполняет её данными.

Код FreeBASIC

Параметры

pguid
Указатель на переменную, куда будет записан созданный GUID.

Возвращаемое значение

В случае успеха функция возвращает константу , в случае ошибки — что‐то другое.

Однако так как тип возвращаемого значения , то проверять успешность выполненения функции следует макросами и , а не сравнивать результат напрямую с константой.

IsEqualGUID, IsEqualIID, IsEqualCLSID и InlineIsEqualGUID

Эти макросы предназначены для сравнения двух GUID, IID или CLSID.

Код FreeBASIC

Макросы IsEqualGUID, IsEqualIID и IsEqualCLSID сравнивают, вызывая функцию memcmp, а InlineIsEqualGUID делает это в коде, сравнивая структуру побайтово.

IIDFromString и CLSIDFromString

Преобразуют строку в IID или CLSID.

Код FreeBASIC

Параметры

pguid
указатель на строку с IID или CLSID.
lpiid или pclsid
Указатель на переменную, куда будет записан GUID.

Возвращаемое значение

В случае успеха функции возвращают константу , в случае ошибки — что‐то другое.

Однако так как тип возвращаемого значения , то проверять успешность выполненения функции следует макросами и , а не сравнивать результат напрямую с константой.

StringFromGUID2

Преобразуют GUID в строку.

Код FreeBASIC

Параметры

rguid
Указатель на GUID.
lpsz
Указатель на буфер, куда будет записана строка.
cchMax
Длина буфера.

Возвращаемое значение

В случае успеха функция возвратит количество записанных символов, включая нулевой.

В случае ошибки, когда буфер под строку слишком мал, вернёт 0.

Преобразуют IID или CLSID в строку.

Код FreeBASIC

Параметры

rclsid
Указатель на IID или CLSID.
lplpsz
Указатель на указатель, по которому будет записан адрес полученной строки. После использования выделенную память следует освободить функцией .

Возвращаемое значение

В случае успеха функция возвратит константу .

В случае ошибки, когда недостаточно памяти, вернёт .

Однако так как тип возвращаемого значения , то проверять успешность выполненения функции следует макросами и , а не сравнивать результат напрямую с константой.

Примеры запросов

Запрос 1. Получение записи складского журнала по её глобальному идентификатору — для версии хозяйствующего субъекта.

Envelope xmlnsdt= xmlnsbs= xmlnsmerc= xmlnsapldef= xmlnsapl= xmlnsvd= xmlnsSOAP-ENV=>
  Header/>
  Body>
    submitApplicationRequest>
      apiKey>apikey
      application>
        serviceId>mercury-g2b.service:2.0
        issuerId>issuerId
        issueDate>2017-09-15T12:00:08
        data>
          getStockEntryByGuidRequest>
            localTransactionId>a10003
            initiator>
              login>user_login
            
            guid>4d6e7063-646d-4d39-bcb9-b601b8688fd0
            enterpriseGuid>ac264dc6-a3eb-4b0f-a86a-9c9577209d6f
          
        
      
    
  

Ответ на запрос 1

Envelope xmlnsdt= xmlnsbs= xmlnsmerc= xmlnsapldef= xmlnsapl= xmlnsenv= xmlnsvd=>
  Header/>
  Body>
    receiveApplicationResultResponse>
      application>
        applicationId>61ab0b41-dbf2-406c-bada-3736b233985e
        status>COMPLETED
        serviceId>mercury-g2b.service
        issuerId>issuerId
        issueDate>2017-09-15T12:00:08.000+03:00
        rcvDate>2017-09-15T12:00:08.000+03:00
        prdcRsltDate>2017-09-15T12:00:11.000+03:00
        result>
          getStockEntryByGuidResponse>
            stockEntry>
              uuid>3885fcf4-dd5c-43b8-a8c9-56d4e094364d
              guid>4d6e7063-646d-4d39-bcb9-b601b8688fd0
              active>true
              last>true
              status>103
              createDate>2017-09-15T12:00:08+03:00
              updateDate>2017-09-15T12:00:08+03:00
              entryNumber>18398325
              batch>
                productType>5
                product>
                  uuid>31c94ff1-a217-f38d-6005-1aa5ca67e146
                  guid>d34504bb-7a93-e1c8-4859-339eafd97c6c
                
                subProduct>
                  uuid>a3cecd19-98ca-46f9-ecd5-90c41fd95e13
                  guid>9540bfdd-4cd6-6f47-ae83-a32a36c36bfe
                
                productItem>
                  uuid>de407a38-bab4-4b48-9732-bdc71e253fa2
                  guid>93acfc5d-7b02-4767-8c7c-9449a02f5971
                  name>Молоко ультрапастеризованное 1,5% холостятское
                  code>430deaca-95e5-4f83-8f3f-4b611187b622
                  packaging>
                    packagingType>
                      uuid>118124c8-ace0-44e1-b212-ee10dd5c1cdc
                      guid>933312a8-dc11-43ee-9daa-abb240bf9e3f
                      globalID>43
                      name>Мешок большой для крупноразмерных навалочных грузов
                    
                    quantity>12
                    volume>33.0
                    unit>
                      uuid>069792f0-053d-11e1-99b4-d8d385fbc9e8
                      guid>21ed96c9-337b-4a27-8761-c6e6ad3c9f5b
                      name>кг
                    
                  
                
                volume>400.0
                unit>
                  uuid>069792f0-053d-11e1-99b4-d8d385fbc9e8
                  guid>21ed96c9-337b-4a27-8761-c6e6ad3c9f5b
                
                dateOfProduction>
                  firstDate>
                    year>2020
                    month>12
                    day>6
                  
                
                expiryDate>
                  firstDate>
                    year>2021
                    month>12
                    day>6
                  
                
                batchID>ASDF1234
                perishable>false
                origin>
                  productItem>
                    name>Молоко ультрапастеризованное 1,5% холостятское
                    code>430deaca-95e5-4f83-8f3f-4b611187b622
                  
                  country>
                    uuid>72a84b51-5c5e-11e1-b9b7-001966f192f1
                    guid>74a3cbb1-56fa-94f3-ab3f-e8db4940d96b
                    name>Российская Федерация
                  
                  producer>
                    enterprise>
                      uuid>8888c36c-df2e-442f-b0d9-faef5e063b43
                      guid>ac264dc6-a3eb-4b0f-a86a-9c9577209d6f
                    
                    role>PRODUCER
                  
                
                lowGradeCargo>false
                packageList>
                  package>
                    level>6
                    packingType>
                      uuid>118124c8-ace0-44e1-b212-ee10dd5c1cdc
                      guid>933312a8-dc11-43ee-9daa-abb240bf9e3f
                      globalID>43
                      name>Мешок большой для крупноразмерных навалочных грузов
                    
                  
                  package>
                    level>1
                    packingType>
                      uuid>a7363144-e6a0-4af0-832f-0d403fdeb761
                      guid>f0b0ec9b-8341-4e95-bc0e-80898be598cb
                      globalID>BE
                      name>Пакет (пачка/связка)
                    
                    productMarks class=>7456873456-147885
                  
                
                owner>
                  uuid>04ceb142-053d-11e1-99b4-d8d385fbc9e8
                  guid>fcd89443-218a-11e2-a69b-b499babae7ea
                
              
              vetDocument>
                uuid>494169a7-0738-4d1d-9f7b-ce301e9cee22
              
            
          
        
      
    
  

Описание ситуации

Когда мы говорим про инфраструктуру Active Directory, то у нас невольно сразу вспоминается понятие групповой политики, и это не удивительно, так как в AD, это одна из фишек централизованного управления. GPO штука отличная, но и с ней могут быть сложности, например, она может не применяться, и как это лечится я показывал. Еще бывает ошибка Ошибка при обработке групповой политики с кодом 1054. Но применимо к нашей задаче, можно отнести ошибку в журналах Windows с кодом 1058, которая звучит:

Ошибка при обработке групповой политики. Попытка чтения файла «\\root.pyatilistnik.org\sysvol\PICompany.ru\Policies\{E26B087E-2CF3-40C9-8910-66E48A1E53C5}\gpt.ini» с контроллера домена была неудачной. Параметры групповой политики не могут быть применены, пока не будет исправлена эта ситуация. Это может быть временным явлением, его возможные причины: a) Ошибка разрешения имен или проблемы сетевого подключения к текущему контроллеру домена. b) Запаздывание репликации Active Directory (созданный на другом контроллере домена файл еще не реплицирован на текущий контроллер домена). c) Отключен клиент распределенной файловой системы (DFS).

Из ошибки видно, что некая политика, которая имеет GUID E26B087E-2CF3-40C9-8910-66E48A1E53C5, не смогла применится для определенного пользователя. Сомневаюсь, что кто-то знает по номеру GUID свои объекты GPO. Вот для таких случаев, вы должны уметь их определять у объектов групповой политики, и находить по ним нужную GPO, это можно сравнить, когда мы узнавали SID пользователя и по SID значению находили пользователя.

Как узнать GUID приложения

Пример вызова компонента Windows диспетчер устройств: shell:::{74246bfc-4c96-11d0-abef-0020af6b0b7a},для запуска необходимо вызвать диалоговое окно «Выполнить» используя клавиши  Win + R, прописать данный код и нажать«OK» Все значения {GUID}хранятся в разделе реестра HKEY_CLASSES_ROOTCLSID. Зайдя в CLSID поиск, лучше всего производить методом перебора значений для правильного определения {GUID} в  значении должен присутствовать подраздел  ShellFolder. Для поиска нужного {GUID} необходимо иметь время и терпение. Итак, всё по порядку.

Как узнать из реестра GUID приложения в Windows -01

Раздел реестра HKEY_CLASSES_ROOTCLSID

Клавишами Win + R открываем диалоговое окно «Выполнить» вводим команду regedit — открыть редактор реестра. Для поиска {GUID} заходим в раздел реестра HKEY_CLASSES_ROOTCLSID

Пример: нам нужен {GUID} «Панели управления — Control Panel», методом перебора значений находим нужный, смотрим наличие подраздела ShellFolder.

Как узнать из реестра GUID приложения в Windows -02

Для того, чтобы извлечь и проверить {GUID} правой клавишей мыши нажимаем на значение, в открывшемся меню выбираем пункт «Экспортировать», и  сохраняем с расширением .reg

Как узнать из реестра GUID приложения в Windows -03

Созданный файл реестра лучше всего открыть программой Notepad ++ познакомиться с которой можно в категории сайта «Офис».Если Вам понравился текстовой редактор Notepad ++ и Вы его установили, то правой клавишей мыши нажимаем на созданный файл реестра. В открывшемся меню выбираем «открыть с помощью Notepad ++ таким образом можно ознакомиться со структурой и синтаксисом файла реестра.

Как узнать из реестра GUID приложения в Windows -04

Выделяем значение, с помощью клавиш Ctrl + C копируем, вызываем диалоговое окно «Выполнить» и с помощью клавиш Ctrl + V вставляем, перед фигурными скобками прописываем Shell::: и нажимаем«OK».

Как узнать из реестра GUID приложения в Windows -05

Как узнать GUID через PowerShell

Для того, чтобы вы могли быстро извлечь информацию, о GUID ,я могу вам предложить небольшой скрипт:

$UninstallKeys = «HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall», «HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall» $null = New-PSDrive -Name HKA -PSProvider Registry -Root Registry::HKEY_USERS $UninstallKeys += Get-ChildItem HKU: -ErrorAction SilentlyContinue | Where-Object { $_.Name -match ‘S-\d-\d+-(\d+-){1,14}\d+$’ } | ForEach-Object { «HKU:\$($_.PSChildName)\Software\Microsoft\Windows\CurrentVersion\Uninstall» } foreach ($UninstallKey in $UninstallKeys) { Get-ChildItem -Path $UninstallKey -ErrorAction SilentlyContinue | Where {$_.PSChildName -match ‘^{{8}-({4}-){3}{12}}$’} | Select-Object @{n=’GUID’;e={$_.PSChildName}}, @{n=’Name’; e={$_.GetValue(‘DisplayName’)}} }

Скачать скрипт получения GUID

Еще один вариант воспользоваться вот такой конструкцией:

get-wmiobject Win32_Product | sort-object -property Name | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

Тут мы еще вывели пути расположения MSI пакетов для удаления приложения и его ремонту.

Предусловия и подготовительные действия

Для получения GUID хозяйствующего субъекта или площадки (предприятия):

  1. Пользователь должен иметь к подсистеме Цербер.ХС.
  2. За пользователем должен быть закреплен хотя бы один хоз.субъект.

Для получения GUID необходимо выполнить следующие действия:

  1. Выполнить вход в подсистему Цербер.ХС.
  2. Выбрать из списка обслуживаемого хоз.субъект, которого вы хотите получить GUID.
  3. Перейти к списку площадок, используя кнопку «Площадки» на странице с информацией о хоз.субъекте для получения GUID площадок (предприятий).

В подсистеме Цербер.ХС переход по разделам может осуществляться двумя способами:

1) С помощью бокового меню, которое включает в себя следующие разделы:

  • хозяйствующий субъект — при переходе в данный раздел открывается страница со сведениями о хоз.субъекте;
  • поднадзорные объекты — открывает реестр поднадзорных объектов обслуживаемого хоз.субъекта;
  • площадки — открывает реестр площадок, у которых хоз.субъект выступает владельцем;
  • заявки — раздел с поданными заявки на редактирование сведений о хоз.субъекте и площадках, и заявки на объединение площадок.

2) С помощью кнопок расположенных в нижней части страницы сведений о хоз.субъекте:

  • объекты — показывает количество поднадзорных объектов и при нажатии осуществляется переход в реестр поднадзорных объектов;
  • площадки — показывает количество площадок, где хоз.субъект является владельцем и при нажатии открывает реестр площадок;
  • связи — показывает количество связей хоз.субъекта с площадками и при нажатии открывает реестр площадок;
  • заявки — раздел с поданными заявки на редактирование сведений о хоз.субъекте и площадках, и заявки на объединение площадок.

Что такое ID?

ID (читается «ай-ди») — это часть английского слова “identifier”, которое переводится как “идентификатор”.

Каждый раз, когда вы где-то регистрируетесь, вы получаете идентификатор, то есть, какое-то имя или номер. И внутри каждой отдельной системы ваш идентификатор уникальный.

Примеры идентификаторов (id):

  • Имя (Сергей Валериевич)
  • Ник (SergeyB)
  • Номер телефона (+7 123 4567890)
  • Номер паспорта (EX 1234 5678910)
  • Номер банковской карты (1234-5678-9012-3456)
  • Номер машины (а123бв 456)
  • IMEI телефона
  • Штрих-код товара
  • E-mail ( primer@mail.ru )
  • Адрес сайта ( http://it-uroki.ru )
  • Номер личной страницы ВКонтакте

Получение GUID площадки (предприятия)

Для получения GUID площадки (предприятия) необходимо перейти в реестр площадок. Для перехода в реестр площадок нажмите «Площадки» в левом верхнем углу страницы или на странице информации о хоз.субъекте в блоке «Сводная информация» нажмите кнопку «Площадки» (рис. 2).

Рис. 2. GUID площадки в Цербер.ХС

После перехода в реестр площадок, перед вами откроется список всех площадок (предприятий), с которыми выбранный хоз.субъект имеет связь (осуществляет подконтрольную деятельность) или является владельцем. Для получения GUID площадки необходимо перейти на страницу просмотра информации площадки нажав на номер площадки или на пиктограмму «Просмотр» (рис. 3).

Рис. 3. GUID площадки в Цербер.ХС

После перехода на страницу с информацией о площадке (предприятии) GUID можно увидеть в блоке «Служебная информация» (рис. 4).

Рис. 4. GUID площадки в Цербер.ХС

Что такое GUID?

GUID — это аббревиатура, которая обозначает глобальный уникальный идентификатор , их также называют UUID или универсальные уникальные идентификаторы — между ними нет реальной разницы. Технически это 128-битные уникальные ссылочные номера, используемые в вычислениях, которые вряд ли будут повторяться при генерировании, несмотря на отсутствие центральных полномочий GUID для обеспечения уникальности.

GUID (глобальный уникальный идентификатор) — это термин, используемый Microsoft для числа, которое ее программа генерирует, чтобы создать уникальную идентичность для объекта, такого как документ Word. Идентификаторы GUID широко используются в продуктах Microsoft для идентификации интерфейсов, наборов реплик, записей и других объектов. Разные виды объектов имеют разные виды GUID — например, база данных Microsoft Access использует 16-байтовое поле для создания уникального идентификатора для репликации.

Типы GUID

Существует 5 версий идентификаторов GUID, определенных в RFC 4122 , каждая с разными свойствами. Чтобы определить версию GUID, просто посмотрите на цифру версии, например, GUID версии 4 имеют формат xxxxxxxx-xxxx- 4 xxx- N xxx-xxxxxxxxxxxx, где N — это одно 5 значений 4, 8,9, A или B.

  • Версия 1: дата-время и MAC-адрес — Эта версия генерируется с использованием текущего времени и MAC-адреса клиента. Это означает, что если у вас есть GUID версии 1, вы можете выяснить, когда он был создан, проверив значение метки времени.
  • Версия 2: DCE Security — Эта версия специально не определена в RFC 4122, поэтому не должна генерироваться совместимыми генераторами. Он аналогичен GUID версии 1, за исключением того, что первые 4 байта метки времени заменяются пользовательским UID или GID POSIX, а старший байт последовательности часов заменяется доменом UID / GID POSIX.
  • Версия 3: MD5 хэш и пространство имен — Этот GUID генерируется путем взятия пространства имен (например, полного доменного имени) и заданного имени, преобразования в байты, объединения и хеширования. После указания специальных битов, таких как версия и вариант, полученные байты затем преобразуются в его шестнадцатеричную форму. Особое свойство этой версии заключается в том, что идентификаторы GUID, сгенерированные из одного и того же имени в одном и том же пространстве имен, будут идентичны, даже если они генерируются в разное время.
  • Версия 4: случайная — Этот тип GUID создается с использованием случайных чисел — из 128 битов в GUID 6 зарезервированы для специального использования (версия + вариантные биты), что дает нам 122 бита, которые могут быть заполнены случайным образом. Спецификация не определяет, как должны генерироваться случайные числа, они могут быть любыми, от псевдослучайных до криптографически безопасных, поэтому эти GUID, как и все другие GUID, следует использовать только для идентификации, а не для безопасности.
  • Версия 5: SHA-1 хэш и пространство имен — Эта версия идентична версии 3 за исключением того, что SHA-1 используется на этапе хеширования вместо MD5.

Разделы реестра, где нужно искать:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall

Узнать SID пользователя или группы в домене AD по имени

Вы можете узнать SID текущей доменной учетной записи командой:

Узнать SID доменного пользователя можно с помощью WMIC. В этом случае в команде нужно указать имя домена:

wmic useraccount where (name=’jjsmith’ and domain=′corp.winitpro.ru′) get sid

Для получения SID доменного пользователя можно воспользоваться командлетом Get-ADUser, входящего в состав модуля Active Directory Module для Windows PowerShell. Получим SID для аккаунта jjsmith:

Get-ADUser -Identity ‘jjsmith’ | select SID

Вы можете получить SID группы AD с помощью другого командлета — Get-ADGroup:

Get-ADGroup -Filter | Select SID

Если на вашем компьютере не установлен модуль AD для PowerShell, вы можете получить SID пользователя с помощью упомянутых ранее классов .Net:

$objUser = New-Object System.Security.Principal.NTAccount(«corp.wintpro.ru»,»jjsmith»)$strS >$strSID.Value

Эта же команда PowerShell в одну строку:

(new-object security.principal.ntaccount “jjsmith»).translate()

Как по GUID найти GPO

Напоминаю, что по умолчанию все объекты групповых политик располагаются на контроллерах домена, по пути C:\Windows\SYSVOL\sysvol\имя вашего домена\Policies. В данной папке все политики как раз и будут иметь в имени значение GUID.

Теперь у нас задача иная, мы зная GUID политики, нам нужно вычислить ее имя, чтобы понять, что за GPO могла не отработать или наоборот, что GPO прилетела и могла, что-то сломать. Как обычно методов несколько, и вы сами будите использовать те, что вам более приемлемы.

Первым методом лично для меня я могу выделить все то же PowerShell. Напоминаю, что у меня есть ID (GUID), который я получил от политики «Управление UIPI» {49DF37C4-D9AF-48D0-85AA-96E91B6CC13A}. Предположим, что мне нужно вычислить именно его. В оболочке введите команду:

Get-GPO -Guid «{49DF37C4-D9AF-48D0-85AA-96E91B6CC13A}»

На выходе вы получите вывод, где нас будет интересовать поле DisplayName, в котором будет содержаться имя объекта групповой политики:

DisplayName : Управление UIPIDomainName : root.pyatilistnik.orgOwner : ROOT\Администраторы доменаId : 49df37c4-d9af-48d0-85aa-96e91b6cc1GpoStatus : AllSettingsEnabledDescription :CreationTime : 16.05.2019 13:58:23ModificationTime : 16.05.2019 15:31:07UserVersion : AD Version: 0, SysVol Version: 0ComputerVersion : AD Version: 9, SysVol Version: 9WmiFilter :

Второй метод, это использование оснастки «Active Directory — Пользователи и компьютеры». Выберите там ваш домен и нажмите поиск.

В поле найти, выберите «Пользовательский поиск», далее переходим на вкладку «Дополнительно» и вводим вот такой LDAP запрос:

(&(objectCategory=groupPolicyContainer)(name={49DF37C4-D9AF-48D0-85AA-96E91B6CC13A}))

Так же через вкладку «Вид», добавьте столбец «Выводимое имя». Именно в нем вы увидите имя политики.

Третьим методом получения имени объекта групповой политики по ID (GUID) значению, это использование поиска в самой оснастке управления групповой политикой. В поисковой форме в поле «Элемент поиска» установите значение код GUID, в условии «Равно» и в значении сам код. После чего нажмите добавить.

После того как условие поиска сформировано, можно нажимать кнопку «Найти». В результате чего вы вычислите искомое GPO.

Еще можно воспользоваться конструкцией для командной строки:

dsquery * -filter «(objectCategory=groupPolicyContainer)» -attr displayName name -limit 0

На выходе вы увидите GUID GPO и его имя. Вот такие вот не хитрые методы получения GUID у GPO и обратно. Так же можете воспользоваться вот таким скриптом:

$results1 = Test-Path C:\GPOReports # Создаем папку в которую положим наш отчет if ($results1 = «False») { New-Item C:\GPOReports -type directory -Force } else { } $results2 = Test-Path C:\GPOReports\GPOReportsGUID.html

# Создание файла if ($results = «False») { New-Item C:\GPOReports\GPOReportsGUID.html -type file -force } else { } Import-Module -Name grouppolicy $guidgpo = Read-Host «Enter the GUID of the GPO (Do Not Include Brackets {}» Get-GPOReport -Domain ТУТ Пишем свой домен -Server Имя вашего сервера DC -GUID $guidgpo -ReportType HTML -Path C:\GPOReports\GPOReportsGUID.html

# Запуск нашего файла отчета в браузере Invoke-Item C:\GPOReports\GPOReportsGUID.html

На первом шаге вводите без {} номер вашего GUID и нажимаете Enter

В результате поисков у вас откроется отчет с вашей политикой.

С вами был Иван Семин, автора и создатель IT портала Pyatilistnik.org.

8 ответов

69

Лучший ответ

Смотрите, если это поможет: —

(http://msdn.microsoft.com/en-us/library/system.guid.parse.aspx)

Ответ дал

02 июнь 2011, в 07:24
Поделиться

5

Нет никакой гарантии, что GUID содержит альфа-символы. является допустимым идентификатором GUID, поэтому и все, что находится между ними.

Если вы используете .NET 4.0, вы можете использовать ответ выше для Guid.Parse и Guid.TryParse. В противном случае вы можете сделать что-то вроде этого:

Ответ дал

02 июнь 2011, в 08:09
Поделиться

5

GUID — это 16-байтовое (128-разрядное) число, обычно представляемое шестнадцатеричной строкой из 32 символов. GUID (в шестнадцатеричной форме) не должен содержать никаких альфа-символов, хотя, вероятно, это возможно. Если вы нацеливаете GUID в шестнадцатеричной форме, вы можете проверить, что строка длиной 32 символа (после удаления тире и фигурных скобок) и имеет только буквы A-F и номера.

Существует определенный стиль представления GUID (dash-placement), и регулярные выражения могут использоваться для проверки этого, например,

из http://www.geekzilla.co.uk/view8AD536EF-BC0D-427F-9F15-3A1BC663848E.htm. При этом следует подчеркнуть, что GUID действительно является 128-битным числом и может быть представлен несколькими различными способами.

Ответ дал

02 июнь 2011, в 07:49
Поделиться

2

На основе принятого ответа я создал метод расширения следующим образом:

Где «MagicNumbers.defaultGuid» — это просто «пустой» все нуль Guid «00000000-0000-0000-0000-000000000000».

В моем случае возвращение этого значения в результате неправильного преобразования ToGuid не было проблемой.

Ответ дал

19 март 2016, в 19:06
Поделиться

1

см. http://en.wikipedia.org/wiki/Globally_unique_identifier

Нет гарантии, что на самом деле будет альфа.

Ответ дал

02 июнь 2011, в 06:15
Поделиться

Когда я просто тестирую строку, чтобы узнать, является ли это GUID, я действительно не хочу создавать объект Guid, который мне не нужен. Так что…

И вот как вы его используете:

Ответ дал

12 май 2016, в 20:10
Поделиться

Вернет Guid, если он действителен Guid, иначе он вернет Guid.Empty

Ответ дал

16 дек. 2014, в 13:52
Поделиться

-3

вы также можете использовать регулярное выражение, посмотреть на этот сайт и выполнить поиск guid.
http://regexlib.com

Ответ дал

02 июнь 2011, в 06:24
Поделиться

Ещё вопросы

  • 2534Без учета регистра ‘Содержит (строка)’
  • 721Как бы вы посчитали вхождения строки (на самом деле символ) внутри строки?
  • 603Как мне сгенерировать поток из строки?
  • 573Лучший способ повторить символ в C #
  • 519Можно ли избежать двойных кавычек в буквальном строковом литерале?
  • 446Если строки являются неизменяемыми в .NET, то почему Substring занимает O (n) времени?
  • 422C # разделить строку другой строкой
  • 411Невозможно обновить EntitySet — потому что у него есть DefiningQuery и отсутствует элемент
  • 358Не удалось найти часть пути… bin \ roslyn \ csc.exe
  • 115Как я могу удалить теги HTML из строки в ASP.NET?

Что такое UID?

Часто встречается надпись “UID”, в которой перед “ID” добавлена буква “U”, которая может быть расшифрована как “unique” — “уникальный”, или как “user” — “пользователь”.

Следовательно, есть два варианта расшифровки аббревиатуры UID:

UID (User identifier) — идентификатор пользователя в операционной системе или на сайте.

Всё просто: некоторые идентификаторы являются уникальными, то есть могут принадлежать только одному субъекту (имя может совпадать, а номер паспорта всегда отличается).

Примеры использования UID:

  • уникальные идентификаторы применяются в ж/д билетах в качестве уникального идентификатора заказа
  • в системе оплаты общественного транспорта Москвы используется индивидуальный заводской серийный номер карты
  • В программах компании “1С” используется УИД — свойство ссылки с типом УникальныйИдентификатор
  • В платежных документах государственных учреждений используется уникальный идентификатор начисления УИН (например, УИН12345678901234567890///)
  • UNIX-подобные операционные системы различают пользователя по его номеру, который обозначается, как UID
  • Некоторые сайты также используют аббревиатурой UID, указывая, что данный идентификатор относится именно к пользователю

Операции с ключами

Уникальный идентификатор в 1С назначается в момент первичной записи элемента. Уже в процессе самой регистрации можно видеть ключ, который будет привязан к нему. Можно в этот процесс вмешаться и вручную до момента регистрации изменить его по своему желанию. Узнать нужный ГУИД можно через созданный запрос в «Конструкторе запроса» (это стандартный метод для любого элемента):

Полученное значение при использовании такого метода будет иметь специальный тип.

Для преобразования к строке нужно употребить: «Строка(Параметр)».

Получить новый ГУИД можно с помощью такого запроса:

Преобразование в код ссылки элемента можно методом УникальныйИдентификатор():

Команда blkid

cat

Однако программа blkid по умолчанию не считывает информацию о разделах непосредственно из соответствующих нод устройств, а считывает ее из файла /etc/blkid.tab. Этот файл зачем-то называется в мане команды blkid кэш файлом, а всем известно, что слово cache имеет множесто значений, а потому совершенно бессмысленно. Должен вас сразу предупредить, что в файле /etc/blkid.tab со временем накапливается устаревшая информация о давно несуществующих разделах, поэтому не думайте читать сам файл в поисках UUID’ов, можете жестоко обмишулиться. Пользуйтесь командой blkid с соответсвующими опциями.

Команда blkid без опций

# blkid

/dev/disk/by-id/scsi-SATA_Hitachi_HTS5416_SB344CHRJT80JD-part7: UUID="465e53f5-a682-4fde-8e0c-4c77a533aca7" TYPE="ext3" SEC_TYPE="ext2" LABEL="Common"
/dev/sda2: UUID="02E4E3A0E4E39467" LABEL="Vista" TYPE="ntfs"
/dev/sda5: UUID="5a179614-0415-48c6-a9ad-3f6ad9596619" TYPE="ext3" SEC_TYPE="ext2"
/dev/sda6: TYPE="swap"
/dev/sda7: UUID="465e53f5-a682-4fde-8e0c-4c77a533aca7" TYPE="ext3" LABEL="Common"
/dev/disk/by-uuid/5a179614-0415-48c6-a9ad-3f6ad9596619: UUID="5a179614-0415-48c6-a9ad-3f6ad9596619" TYPE="ext3" SEC_TYPE="ext2"
/dev/sda8: UUID="41825dd5-d866-45f6-bcfd-c4c9aa4de045" SEC_TYPE="ext2" TYPE="ext3" LABEL="lenny"
/dev/sda9: UUID="e6758566-4e3b-4cf0-be5e-37949b52c64f" SEC_TYPE="ext2" TYPE="ext3" LABEL="deb2"
/dev/sda1: UUID="5408E10E08E0F042" LABEL="WinRE" TYPE="ntfs"

Я предупреждал. Тут, конечно, можно разобраться при желании, но непонятно, откуда может взяться такое желание, когда можно поступить проще. А именно запустить команду blkid с опцией -c.

Команда blkid с опцией -c

# blkid -c /dev/null

/dev/sda1: UUID="5408E10E08E0F042" LABEL="WinRE" TYPE="ntfs"
/dev/sda2: UUID="02E4E3A0E4E39467" LABEL="Vista" TYPE="ntfs"
/dev/sda5: UUID="5a179614-0415-48c6-a9ad-3f6ad9596619" TYPE="ext3"
/dev/sda6: TYPE="swap"
/dev/sda7: LABEL="Common" UUID="465e53f5-a682-4fde-8e0c-4c77a533aca7" TYPE="ext3"
/dev/sda8: LABEL="lenny" UUID="41825dd5-d866-45f6-bcfd-c4c9aa4de045" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda9: LABEL="deb2" UUID="e6758566-4e3b-4cf0-be5e-37949b52c64f" SEC_TYPE="ext2" TYPE="ext3"

Совсем другое дело, не правда ли?

Поэтому советую сохранить старые файлы blkid.tab и blkid.tab.old под другими именами, тогда при следующей загрузке будет создан новенький чистенький файлик blkid.tab, где все будет как в выводе команды . Стоит после этого проверить /etc/fstab и /boot/grub/menu.lst.

Остальные опции команды крайне невыразительны и бесполезны. Чем трудиться запоминать их, проще запустить команду вовсе без опций или с опцией -c /dev/null. Тем не менее:

Опция

# blkid /dev/sda5

/dev/sda5: UUID="5a179614-0415-48c6-a9ad-3f6ad9596619" TYPE="ext3" SEC_TYPE="ext2"

Выдает сведения об указанном устройстве.

Опция -t

# blkid -t TYPE=ntfs

/dev/sda2: UUID="02E4E3A0E4E39467" LABEL="Vista" TYPE="ntfs"
/dev/sda1: UUID="5408E10E08E0F042" LABEL="WinRE" TYPE="ntfs"

Найдет все устройства, отвечающие заданному критерию, будь то TYPE, LABEL, или UUID. Можно сужать круг поиска, вводя в командную строку имена интересующих устройств:

# blkid -t TYPE=ntfs /dev/sda1 /dev/sda2 /dev/sda6 /dev/sda7

/dev/sda1: UUID="5408E10E08E0F042" LABEL="WinRE" TYPE="ntfs"
/dev/sda2: UUID="02E4E3A0E4E39467" LABEL="Vista" TYPE="ntfs"

Опция -s

# blkid -s UUID /dev/sda7

/dev/sda7: UUID="465e53f5-a682-4fde-8e0c-4c77a533aca7"

Выдаст только указанный критерий нужного устройства.

Опция -o

# blkid -o value
465e53f5-a682-4fde-8e0c-4c77a533aca7
ext3
ext2
Common
02E4E3A0E4E39467
Vista
ntfs
5a179614-0415-48c6-a9ad-3f6ad9596619
ext3
ext2
swap
465e53f5-a682-4fde-8e0c-4c77a533aca7
ext3
Common
5a179614-0415-48c6-a9ad-3f6ad9596619
ext3
ext2
41825dd5-d866-45f6-bcfd-c4c9aa4de045
ext2
ext3
lenny
e6758566-4e3b-4cf0-be5e-37949b52c64f
ext2
ext3
deb2
5408E10E08E0F042
WinRE
ntfs

По моему, проще переадресовать в файл «file» вывод команды.

# blkid -c /dev/null > file

Опция -v

Вот все, что касается команды blkid. Однако существуют и другие возможности узнать UUID раздела.

Самая очевидная — заглянуть в директорию /dev:

# ls /dev/disk

by-id  by-label  by-path  by-uuid

Там четыре субдиректории, одна из которых by-uuid. Посмотрим:

# ls /dev/disk/by-uuid

02E4E3A0E4E39467                      5408E10E08E0F042
41825dd5-d866-45f6-bcfd-c4c9aa4de045  5a179614-0415-48c6-a9ad-3f6ad9596619
465e53f5-a682-4fde-8e0c-4c77a533aca7  e6758566-4e3b-4cf0-be5e-37949b52c64f

Вот поди, догадайся, что к чему относится! Нет, это не метод.

Заключение

Если говорить о разделах жесткого диска, то UUID’ы присваиваются им в процессе создания файловой системы (некоторые утверждают, что они вычисляются из характеристик раздела), и записываются где-нибудь в суперблоках. Во всяком случае, еще не отформатированный раздел не имеет UUID’а. А при клонировании раздела командой dd, раздел, в который устанавливают клон, меняет свой UUID на идентификатор клона.

При загрузке компьютера, программа udev записывает UUID раздела в его ноду — файл блочного устройства в директории /dev. В доступной пользователю части файловой системы, UUID’ы разделов можно найти в файле /etc/blkid.tab, но информация эта может оказаться устаревшей.

Нравится мне это или нет, но UUID’ы прочно вошли в повседневный быт линуксоида. И нет в них никакой мистики.

Средняя оценка 5 при 3 голосовавших

Ссылка на основную публикацию