Je joue avec l'API WinHTTP Server 2.0 et je suis en train étapes (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364672(v=vs.85).aspx):Définissez l'ACL spécifiant les processus de travail qui sont autorisés à recevoir des E/S sur la file d'attente de demande
- Créer la demande la file d'attente et spécifie le nom.
- Configurez la file d'attente de requêtes à l'aide de la fonction
HttpSetRequestQueueProperty
. - Interrogez les paramètres de configuration de la file d'attente de requêtes à l'aide de la fonction
HttpQueryRequestQueueProperty
. - Créez des groupes d'URL et associez-les à une file d'attente de requêtes.
- Définissez l'ACL en spécifiant les processus de travail autorisés à recevoir des E/S dans la file d'attente de demandes.
- Appelez
HttpWaitForDemandStart
pour retarder l'instanciation des processus de travail jusqu'à ce que la première requête arrive dans la file d'attente des demandes.
pourrait-il aider à l'étape:
Définissez l'ACL spécifiant les processus de travail qui sont autorisés à recevoir des E/S sur la file d'attente de demande
Je ne suis pas sûr de ce que fait cela signifie vraiment (je n'ai jamais utilisé ACL API), mais je suppose que je dois appeler ::GetNamedSecurityInfo()
à un moment donné pour le modifier puis:
if (NO_ERROR == ::HttpCreateRequestQueue(HTTPAPI_VERSION_2,
requestQueueName,
0,
HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER,
&m_requestQueue))
// setup queue
if (NO_ERROR == ::HttpCreateUrlGroup(m_sessionId, &m_groupId, 0))
{
HTTP_BINDING_INFO bindingInfo{ 1, m_requestQueue };
if (NO_ERROR == ::HttpSetUrlGroupProperty(m_groupId,
HttpServerBindingProperty,
&bindingInfo,
sizeof(bindingInfo)))
{
m_localUrl = (NO_ERROR == (::HttpAddUrlToUrlGroup(m_groupId, localUrl.c_str(), 0, 0)));
m_globalUrl = (NO_ERROR == (::HttpAddUrlToUrlGroup(m_groupId, globalUrl.c_str(), 0, 0)));
PACL pacl = NULL;
PSECURITY_DESCRIPTOR securityDescriptor = NULL;
DWORD result = ::GetNamedSecurityInfo(requestQueueName,
SE_KERNEL_OBJECT,
SACL_SECURITY_INFORMATION,
NULL,
NULL,
NULL,
&pacl,
&securityDescriptor);
// it (result != 0) fails when passing various SE_OBJECT_TYPEs
}
}
n'est pas un * ACL * mais un descripteur de sécurité dans 'SECURITY_ATTRIBUTES'. C'est comme quand vous créez un objet du noyau, rien de spécial. vous pouvez et passez 0. pour autoriser l'accès à tout - peut définir 0 DACL est SD. et vous n'avez pas besoin de modifier puis après créer. vous avez juste besoin de définir ce que vous voulez comme SD – RbMm