Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Donanım Destek Uygulaması (HSA), belirli bir sürücü veya RPC (Uzaktan Yordam Çağrısı) uç noktasıyla eşleştirilmiş, cihaza özgü bir uygulamadır.
Bir Mağaza uygulamasını bir sürücüyle ilişkilendirmek için, önce özel yetenek olarak adlandırılan özel bir değer ayırın. Ardından, özelliği tanıtan ve uygulama geliştiricisine bu özelliği sağlayan uygulamalara erişim izni verin. Bu sayfada, sürücü geliştiricisi için bu adımlar açıklanmaktadır.
Uygulama geliştiricisinin adımları Donanım Destek Uygulaması (HSA): Uygulama Geliştiricileri için adımlar başlığında açıklanmıştır.
HSA, üç "DCH" tasarım ilkesinden biridir.
Özel bir özellik ayırma
İlk olarak, özel bir yetenek ayırın:
Microsoft Donanım Destek Uygulamaları İncelemesi'ne (HSAReview@microsoft.com) aşağıdaki bilgilerle e-posta gönderin:
İletişim bilgileri
Şirket adı
Özelliğin adı (benzersiz olmalı ve sahibine atıfta bulunmalıdır)
Yeteneğin hangi kaynaklara erişmesi gerekir?
Güvenlik veya gizlilikle ilgili tüm endişeler
İş ortağına hangi veri olayları işlenir?
Olaylar hassas kullanıcı konumları, parolalar, IP adresi, PUID, cihaz kimliği, CID, kullanıcı adı ve kişi verileri gibi kişisel tanımlayıcıları içerir mi?
Veri olayları kullanıcının cihazında mı kalıyor yoksa iş ortağına mı gönderiliyor?
Yeteneğiniz hangi verilere erişim sağlıyor?
Bu özelliğin son kullanıcısının avantajı nedir?
Microsoft Store Uygulama Yayımcısı Kimliğini ekleyin. Bir tane almak için Microsoft Store sayfasında bir iskelet uygulama girişi oluşturun. Uygulama PFN'nizi ayırma hakkında daha fazla bilgi için bkz. Bir ad ayırarak uygulamanızı oluşturma.
İstek onaylanırsa, Microsoft CompanyName.capabilityName_PublisherID biçiminde benzersiz bir özel yetenek dizesi adını geri gönderir.
Artık bir RPC uç noktasına veya sürücüye erişime izin vermek için özel özelliği kullanabilirsiniz.
Özel özelliği kullanarak UWP uygulamasına RPC uç noktasına erişim izni verme
Özel özelliğe sahip bir UWP uygulamasına RPC uç noktasına erişim izni vermek için şu adımları izleyin:
Özel özellik adını bir güvenlik kimliğine (SID) dönüştürmek için DeriveCapabilitySidsFromName öğesini çağırın.
ERIŞIM izni verilen ACE'nize SID'yi ve RPC uç noktanızın güvenlik tanımlayıcısı için gereken diğer SID'leri ekleyin.
Güvenlik Tanımlayıcısı'ndan alınan bilgileri kullanarak bir RPC uç noktası oluşturun.
Özel Yetenek örneğindekiRPC sunucu kodunda bu işlemin bir uygulamasını görebilirsiniz.
Özel özelliği kullanarak bir UWP uygulamasına sürücü erişimine izin verme
Özel özelliği olan bir UWP uygulamasına sürücü erişimine izin vermek için INF dosyasına veya sürücü kaynağına birkaç satır ekleyin.
INF dosyasında, özel yeteneğinizi aşağıdaki gibi belirtin:
[WDMPNPB003_Device.NT.Interfaces]
AddInterface= {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz},,AddInterfaceSection
[AddInterfaceSection]
AddProperty= AddInterfaceSection.AddProps
[AddInterfaceSection.AddProps]
; DEVPKEY_DeviceInterface_UnrestrictedAppCapabilities
{026e516e-b814-414b-83cd-856d6fef4822}, 8, 0x2012,, "CompanyName.myCustomCapabilityName_MyStorePubId"
Veya bu kodu sürücüde uygulayın:
WDF_DEVICE_INTERFACE_PROPERTY_DATA PropertyData = {};
WCHAR customCapabilities[] = L"CompanyName.myCustomCapabilityName_MyStorePubId\0";
WDF_DEVICE_INTERFACE_PROPERTY_DATA_INIT(
&PropertyData,
&m_VendorDefinedSubType,
&DEVPKEY_DeviceInterface_UnrestrictedAppCapabilities);
Status = WdfDeviceAssignInterfaceProperty(
m_FxDevice,
&PropertyData,
DEVPROP_TYPE_STRING_LIST,
ARRAYSIZE(customCapabilities),
reinterpret_cast<PVOID>(customCapabilities));
zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz etiketi yerine, arabirimin kullanıma sunulması için GUID değerini yerleştirin.
CompanyName değerini şirketinizin adıyla, myCustomCapabilityName değerini şirketinizde benzersiz bir adla ve MyStorePubId değerini yayımcı mağaza kimliğinizle değiştirin.
Bu uygulanan sürücü kodu örneği için bkz . Evrensel sürücüler için Sürücü paketi yükleme araç seti.
Özelliğini çekirdek modunda ayarlamak için şu kodu kullanın:
#if defined(NTDDI_WIN10_RS2) && (NTDDI_VERSION >= NTDDI_WIN10_RS2)
//
// Adding Custom Capability:
//
// Adds a custom capability to device interface instance that allows a Windows
// Store device app to access this interface using Windows.Devices.Custom namespace.
// This capability can be defined either in INF or here as shown below. In order
// to define it from the INF, uncomment the section "OsrUsb Interface installation"
// from the INF and remove the block of code below.
//
static const wchar_t customCapabilities[] = L"microsoft.hsaTestCustomCapability_q536wpkpf5cy2\0";
status = g_pIoSetDeviceInterfacePropertyData(&symbolicLinkName,
&DEVPKEY_DeviceInterface_UnrestrictedAppCapabilities,
0,
0,
DEVPROP_TYPE_STRING_LIST,
sizeof(customCapabilities),
(PVOID)&customCapabilities);
if (!NT_SUCCESS(status)) {
TraceEvents(TRACE_LEVEL_ERROR, DBG_PNP,
"IoSetDeviceInterfacePropertyData failed to set custom capability property %!STATUS!\n", status);
goto Error;
}
#endif
İmzalı Özel Yetenek Tanımlayıcısı (SCCD) dosyası hazırlanıyor
İmzalı Özel Yetenek Tanımlayıcısı (SCCD) dosyası, bir veya daha fazla özel özelliğin kullanımını yetkilendirilen imzalı bir XML dosyasıdır. Sürücü veya RPC uç noktasının sahibi, bu dosyayı sağlayarak uygulama geliştiricisine özel yetenek verir.
SCCD dosyasını hazırlamak için önce özel yetenek dizesini güncelleştirin. Başlangıç noktası olarak aşağıdaki örneği kullanın:
<?xml version="1.0" encoding="utf-8"?>
<CustomCapabilityDescriptor xmlns="http://schemas.microsoft.com/appx/2016/sccd" xmlns:s="http://schemas.microsoft.com/appx/2016/sccd">
<CustomCapabilities>
<CustomCapability Name="microsoft.hsaTestCustomCapability_q536wpkpf5cy2"></CustomCapability>
</CustomCapabilities>
<AuthorizedEntities>
<AuthorizedEntity AppPackageFamilyName="MicrosoftHSATest.Microsoft.SDKSamples.Hsa.CPP_q536wpkpf5cy2" CertificateSignatureHash="ca9fc964db7e0c2938778f4559946833e7a8cfde0f3eaa07650766d4764e86c4"></AuthorizedEntity>
</AuthorizedEntities>
<Catalog>0000</Catalog>
</CustomCapabilityDescriptor>
Ardından, özel yetenek sahibi, uygulama geliştiricisinden Paket Aile Adı (PFN) ve imza karmasını alır ve bu dizeleri SCCD dosyasında günceller.
Note
Uygulamanın doğrudan sertifikayla imzalanması gerekmez, ancak belirtilen sertifika, uygulamayı imzalayan sertifika zincirinin bir parçası olmalıdır.
SCCD'yi tamamladıktan sonra, özellik sahibi bunu imzalamak üzere Microsoft'a e-posta ile iletir. Microsoft, imzalı SCCD'yi yetenek sahibine döndürür.
Ardından özellik sahibi SCCD'yi uygulama geliştiricisine gönderir. Uygulama geliştiricisi, uygulama bildiriminde imzalı SCCD'yi içerir. Uygulama geliştiricisinin yapması gerekenleri öğrenmek için bkz . Donanım Destek Uygulaması (HSA): Uygulama Geliştiricileri için adımlar.
SCCD kapsamını sınırlama
Özel özellik sahibi, test amacıyla donanım destek uygulamasının yüklenmesini geliştirici modundaki bilgisayarlara kısıtlayabilir.
Bunu yapmak için SCCD'yi Microsoft tarafından imzalanmadan önce DeveloperModeOnly ekleyin:
<?xml version="1.0" encoding="utf-8"?>
<CustomCapabilityDescriptor xmlns="http://schemas.microsoft.com/appx/2016/sccd" xmlns:s="http://schemas.microsoft.com/appx/2016/sccd">
<CustomCapabilities>
<CustomCapability Name="microsoft.hsaTestCustomCapability_q536wpkpf5cy2"></CustomCapability>
</CustomCapabilities>
<AuthorizedEntities>
<AuthorizedEntity AppPackageFamilyName="MicrosoftHSATest.Microsoft.SDKSamples.Hsa.CPP_q536wpkpf5cy2" CertificateSignatureHash="ca9fc964db7e0c2938778f4559946833e7a8cfde0f3eaa07650766d4764e86c4"></AuthorizedEntity>
</AuthorizedEntities>
<Catalog>0000</Catalog>
<DeveloperModeOnly Value="true" />
</CustomCapabilityDescriptor>
Sonuçta elde edilen imzalı SCCD yalnızca Geliştirici Modu'ndaki cihazlarda çalışır.
Herhangi bir uygulamanın özel bir özellik kullanmasına izin verme
Özel bir özellik kullanabilecek yetkili varlıkları (uygulamalar) belirtmenizi öneririz. Ancak bazı durumlarda herhangi bir uygulamanın SCCD içermesine izin vermek isteyebilirsiniz. Windows 10 sürüm 1809'dan başlayarak, AuthorizedEntities öğesine AllowAny ekleyerek bunu yapabilirsiniz. En iyi yöntem SCCD dosyasında yetkili varlıkları bildirmek olduğundan lütfen Microsoft tarafından imzalanacak SCCD'nizi gönderirken AllowAny'yi kullanmak için bir gerekçe belirtin.
<?xml version="1.0" encoding="utf-8"?>
<CustomCapabilityDescriptor xmlns="http://schemas.microsoft.com/appx/2018/sccd" xmlns:s="http://schemas.microsoft.com/appx/2018/sccd">
<CustomCapabilities>
<CustomCapability Name="microsoft.hsaTestCustomCapability_q536wpkpf5cy2"></CustomCapability>
</CustomCapabilities>
<AuthorizedEntities AllowAny="true"/>
<Catalog>0000</Catalog>
</CustomCapabilityDescriptor>
Sonuçta elde edilen imzalı SCCD, herhangi bir uygulama paketinde doğrulanır.
Birden çok SCCD
Windows 10 sürüm 1803'ten itibaren, uygulamalar bir veya daha fazla SCCD dosyasından özel özellikler bildirebilir. SCCD dosyalarını uygulama paketinin köküne yerleştirin.
SCCD XML Şeması
SCCD dosyası için resmi XML XSD şeması aşağıdadır. SCCD'nizi gözden geçirilmeden önce doğrulamak için bu şemayı kullanın. Şemayı içeri aktarma ve IntelliSense ile doğrulama hakkında bilgi için bkz. Şema Önbelleği ve XML Belgesi doğrulaması .
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="https://www.w3.org/2001/XMLSchema"
targetNamespace="http://schemas.microsoft.com/appx/2016/sccd"
xmlns:s="http://schemas.microsoft.com/appx/2016/sccd"
xmlns="http://schemas.microsoft.com/appx/2016/sccd">
<xs:element name="CustomCapabilityDescriptor" type="CT_CustomCapabilityDescriptor">
<xs:unique name="Unique_CustomCapability_Name">
<xs:selector xpath="s:CustomCapabilities/s:CustomCapability"/>
<xs:field xpath="@Name"/>
</xs:unique>
</xs:element>
<xs:complexType name="CT_CustomCapabilityDescriptor">
<xs:sequence>
<xs:element ref="CustomCapabilities" minOccurs="1" maxOccurs="1"/>
<xs:element ref="AuthorizedEntities" minOccurs="1" maxOccurs="1"/>
<xs:element ref="DeveloperModeOnly" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Catalog" minOccurs="1" maxOccurs="1"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="CustomCapabilities" type="CT_CustomCapabilities" />
<xs:complexType name="CT_CustomCapabilities">
<xs:sequence>
<xs:element ref="CustomCapability" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="CustomCapability">
<xs:complexType>
<xs:attribute name="Name" type="ST_CustomCapability" use="required"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="ST_NonEmptyString">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="32767"/>
<xs:pattern value="[^\s]|([^\s].*[^\s])"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_CustomCapability">
<xs:annotation>
<xs:documentation>Custom capabilities should be a string in the form of Company.capabilityName_PublisherId</xs:documentation>
</xs:annotation>
<xs:restriction base="ST_NonEmptyString">
<xs:pattern value="[A-Za-z0-9][-_.A-Za-z0-9]*_[a-hjkmnp-z0-9]{13}"/>
<xs:minLength value="15"/>
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="AuthorizedEntities" type="CT_AuthorizedEntities" />
<xs:complexType name="CT_AuthorizedEntities">
<xs:sequence>
<xs:element ref="AuthorizedEntity" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="AuthorizedEntity" type="CT_AuthorizedEntity" />
<xs:complexType name="CT_AuthorizedEntity">
<xs:attribute name="CertificateSignatureHash" type="ST_CertificateSignatureHash" use="required"/>
<xs:attribute name="AppPackageFamilyName" type="ST_NonEmptyString" use="required"/>
</xs:complexType>
<xs:simpleType name="ST_CertificateSignatureHash">
<xs:restriction base="ST_NonEmptyString">
<xs:pattern value="[A-Fa-f0-9]+"/>
<xs:minLength value="64"/>
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="DeveloperModeOnly">
<xs:complexType>
<xs:attribute name="Value" type="xs:boolean" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Catalog" type="ST_Catalog" />
<xs:simpleType name="ST_Catalog">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z0-9\+\/\=]+"/>
<xs:minLength value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Aşağıdaki şema, Windows 10, sürüm 1809 itibarıyla da geçerlidir. Bir SCCD'nin herhangi bir uygulama paketini yetkili varlık olarak bildirmesini sağlar.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="https://www.w3.org/2001/XMLSchema"
targetNamespace="http://schemas.microsoft.com/appx/2018/sccd"
xmlns:s="http://schemas.microsoft.com/appx/2018/sccd"
xmlns="http://schemas.microsoft.com/appx/2018/sccd">
<xs:element name="CustomCapabilityDescriptor" type="CT_CustomCapabilityDescriptor">
<xs:unique name="Unique_CustomCapability_Name">
<xs:selector xpath="s:CustomCapabilities/s:CustomCapability"/>
<xs:field xpath="@Name"/>
</xs:unique>
</xs:element>
<xs:complexType name="CT_CustomCapabilityDescriptor">
<xs:sequence>
<xs:element ref="CustomCapabilities" minOccurs="1" maxOccurs="1"/>
<xs:element ref="AuthorizedEntities" minOccurs="1" maxOccurs="1"/>
<xs:element ref="DeveloperModeOnly" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Catalog" minOccurs="1" maxOccurs="1"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="CustomCapabilities" type="CT_CustomCapabilities" />
<xs:complexType name="CT_CustomCapabilities">
<xs:sequence>
<xs:element ref="CustomCapability" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="CustomCapability">
<xs:complexType>
<xs:attribute name="Name" type="ST_CustomCapability" use="required"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="ST_NonEmptyString">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="32767"/>
<xs:pattern value="[^\s]|([^\s].*[^\s])"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ST_CustomCapability">
<xs:annotation>
<xs:documentation>Custom capabilities should be a string in the form of Company.capabilityName_PublisherId</xs:documentation>
</xs:annotation>
<xs:restriction base="ST_NonEmptyString">
<xs:pattern value="[A-Za-z0-9][-_.A-Za-z0-9]*_[a-hjkmnp-z0-9]{13}"/>
<xs:minLength value="15"/>
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="AuthorizedEntities" type="CT_AuthorizedEntities" />
<xs:complexType name="CT_AuthorizedEntities">
<xs:sequence>
<xs:element ref="AuthorizedEntity" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="AllowAny" type="xs:boolean" use="optional"/>
</xs:complexType>
<xs:element name="AuthorizedEntity" type="CT_AuthorizedEntity" />
<xs:complexType name="CT_AuthorizedEntity">
<xs:attribute name="CertificateSignatureHash" type="ST_CertificateSignatureHash" use="required"/>
<xs:attribute name="AppPackageFamilyName" type="ST_NonEmptyString" use="required"/>
</xs:complexType>
<xs:simpleType name="ST_CertificateSignatureHash">
<xs:restriction base="ST_NonEmptyString">
<xs:pattern value="[A-Fa-f0-9]+"/>
<xs:minLength value="64"/>
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="DeveloperModeOnly">
<xs:complexType>
<xs:attribute name="Value" type="xs:boolean" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Catalog" type="ST_Catalog" />
<xs:simpleType name="ST_Catalog">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z0-9\+\/\=]+"/>
<xs:minLength value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
İlgili konular
- Windows sürücüleri geliştirmeye başlama
- Evrensel Windows Platformu Tanıtımı
- Evrensel Windows Platformu (UWP)
- Uygulama özellikleri
- Visual Studio kullanarak UWP uygulamaları geliştirme
- Evrensel Windows Platformu (UWP) uygulamasıyla sürücü eşleştirme
- UWP uygulamaları geliştirme
- Masaüstü Uygulaması Dönüştürücüsü'nü (Masaüstü Köprüsü) kullanarak bir uygulamayı paketleme
- Özel Yetenek Örneği Uygulaması
- Özel Yetenek Sürücüsü Örneği
- Windows 10'da uygulamaları dışarıdan yükleme
- Özelleştirilmiş Yetenekler Hakkında Sıkça Sorulan Sorular