使用C ++获取本地计算机所属的OU(组织单位)名称(Get OU (Organizational Unit) name that a local computer belongs to using

编程入门 行业动态 更新时间:2024-10-25 06:33:39
使用C ++获取本地计算机所属的OU(组织单位)名称(Get OU (Organizational Unit) name that a local computer belongs to using C++)

我需要找出本地计算机是否属于使用WinAPI / C ++。 有什么想法?

I need to find out the name of the OU that the local computer (that is connected to the Active Directory) belongs to using WinAPI/C++. Any ideas?

最满意答案

对于在C ++ C ++中访问Active Directory的简单WINAPI(非COM)方式,请参阅轻量级目录访问协议


void AfficheErreurLdap(char *fonction, ULONG rc); /* * * Fonction d'entrée du programme * */ void main(int argc, char* argv[]) { LDAP *pSessionLdap; // Pointeur vers la session LDAP char *pHote; // Pointeur vers la chaîne représentant le nom de l'hôte char *pUtilisateur; // Pointeur vers la chaîne représentant l'utilisateur char *pMotDePasse; // Pointeur vers la chaîne représentant le mot de passe char *pRacineLdap; // Pointeur vers la racine Ldap ULONG rc; // Récupération du code de retour des appels LDAPMessage *pResultat; // Pointeur vers le message résultat de la réquête LDAP LDAPMessage *pEntree; // Utilisée lors du parcours du résultat pour l'affichage char *pDN; // Pointeur vers le DN d'une entrée du résultat char *pAttribut; // Pointeur vers la chaîne représentant l'attribut BerElement *pBer = NULL;// "curseur" interne à l'API LDAP pour le parcours des elts char **pValeurs; // Valeurs de l'attribut lors de l'affichage du résultat int i; // Indice pour la parcours des valeurs d'attribut /* Analyse des Paramètres de lancement et affichage d’un message d’erreur si incorrect */ if (argc != 5) { fprintf(stderr,"Syntaxe :\n\tex_cldap_1 Hote Utilisateur MotDePasse RacineLdap\n"); exit (1); } /* Récupération des paramètres des lancement */ pHote = argv[1]; pUtilisateur = argv[2]; pMotDePasse = argv[3]; pRacineLdap = argv[4]; /* Ouverture de la session LDAP et récupération du handle de session */ pSessionLdap = ldap_open( pHote, 389); /* 389 est le numéro de port standard LDAP */ if ( pSessionLdap == NULL ) { // En cas d'erreur : affichage du message d'erreur adéquat perror( "ldap_open" ); exit( 2 ); } printf("Ouverture de la session réalisée\n"); /* Authentification du client */ /* Pour l'exemple, l'authentification est faite en tant qu'anonyme */ rc = ldap_simple_bind_s(pSessionLdap, pUtilisateur, pMotDePasse); if ( rc != LDAP_SUCCESS ) { // Erreur lors de l'authentification, on termine après affichage d'un message AfficheErreurLdap("ldap_simple_bind_s", rc); exit( 3 ); } printf("Authentification réalisée\n"); /* */ /* Recherche des données dans l'annuaire */ /* */ rc = ldap_search_s(pSessionLdap, // Session LDAP pRacineLdap, // Base de la recherche LDAP_SCOPE_SUBTREE, // Sccpe : LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL, LDAP_SCOPE_SUBTREE "(objectClass=*)", // Filtre de recherche NULL, // Attributs que l'on souhaite visualiser 0, // Indique si l'on souhaite uniquement les types (1) ou // Les attributs et les valeurs (0) &pResultat ) ; // Pointeur vers le résultat if (rc != LDAP_SUCCESS ) { // Erreur lors de la recherche, on termine après affichage du message d'erreur AfficheErreurLdap("ldap_search_s", rc); exit (4); } printf("Requête réalisée\n"); /* On va maintenant parcourir le résultat et afficher les couples */ /* attributs, valeurs */ pEntree = ldap_first_entry( pSessionLdap, pResultat ); while (pEntree != NULL) { // Récupération du DN, et affichage de celui-ci pDN = ldap_get_dn( pSessionLdap, pEntree ); if ( pDN != NULL ) { printf( "dn: %s\n", pDN ); // Libération de la mémoire allouée par l'API LDAP ldap_memfree( pDN ); } // Pour chaque attribut, on va lire le couple attribut, valeur pAttribut = ldap_first_attribute( pSessionLdap, pEntree, &pBer ); while ( pAttribut != NULL) { // Récupération des valeurs associées à un attribut pValeurs = ldap_get_values( pSessionLdap, pEntree, pAttribut); if (pValeurs != NULL ) { for ( i = 0; pValeurs[i] != NULL; i++ ) printf( "%s: %s\n", pAttribut, pValeurs[i]); // Libération des valeurs lues ldap_value_free( pValeurs ); } // Libération de la mémoire utilisée par l'attribut ldap_memfree( pAttribut ); // Lecture de l'attribut suivant pAttribut = ldap_next_attribute( pSessionLdap, pEntree, pBer ); } // Passage à la ligne dans l'affichage printf( "\n\n" ); // Récupération de l'entrée suivante de l'annuaire pEntree = ldap_next_entry( pSessionLdap, pEntree ); } // Libération du message de résultat ldap_msgfree( pResultat ); /* Fin de la session LDAP */ ldap_unbind( pSessionLdap ); } /* * * Fonction permettant d'afficher les erreurs des opérations LDAP * * */ void AfficheErreurLdap(char *fonction, ULONG rc) { fprintf(stderr,"Erreur LDAP dans la fonction '%s', Code : %ld (0x%xld)\n", fonction, rc,rc); }

For a simple WINAPI (not COM) way to acces Active Directory in C or C++ see Lightweight Directory Access Protocol


void AfficheErreurLdap(char *fonction, ULONG rc); /* * * Fonction d'entrée du programme * */ void main(int argc, char* argv[]) { LDAP *pSessionLdap; // Pointeur vers la session LDAP char *pHote; // Pointeur vers la chaîne représentant le nom de l'hôte char *pUtilisateur; // Pointeur vers la chaîne représentant l'utilisateur char *pMotDePasse; // Pointeur vers la chaîne représentant le mot de passe char *pRacineLdap; // Pointeur vers la racine Ldap ULONG rc; // Récupération du code de retour des appels LDAPMessage *pResultat; // Pointeur vers le message résultat de la réquête LDAP LDAPMessage *pEntree; // Utilisée lors du parcours du résultat pour l'affichage char *pDN; // Pointeur vers le DN d'une entrée du résultat char *pAttribut; // Pointeur vers la chaîne représentant l'attribut BerElement *pBer = NULL;// "curseur" interne à l'API LDAP pour le parcours des elts char **pValeurs; // Valeurs de l'attribut lors de l'affichage du résultat int i; // Indice pour la parcours des valeurs d'attribut /* Analyse des Paramètres de lancement et affichage d’un message d’erreur si incorrect */ if (argc != 5) { fprintf(stderr,"Syntaxe :\n\tex_cldap_1 Hote Utilisateur MotDePasse RacineLdap\n"); exit (1); } /* Récupération des paramètres des lancement */ pHote = argv[1]; pUtilisateur = argv[2]; pMotDePasse = argv[3]; pRacineLdap = argv[4]; /* Ouverture de la session LDAP et récupération du handle de session */ pSessionLdap = ldap_open( pHote, 389); /* 389 est le numéro de port standard LDAP */ if ( pSessionLdap == NULL ) { // En cas d'erreur : affichage du message d'erreur adéquat perror( "ldap_open" ); exit( 2 ); } printf("Ouverture de la session réalisée\n"); /* Authentification du client */ /* Pour l'exemple, l'authentification est faite en tant qu'anonyme */ rc = ldap_simple_bind_s(pSessionLdap, pUtilisateur, pMotDePasse); if ( rc != LDAP_SUCCESS ) { // Erreur lors de l'authentification, on termine après affichage d'un message AfficheErreurLdap("ldap_simple_bind_s", rc); exit( 3 ); } printf("Authentification réalisée\n"); /* */ /* Recherche des données dans l'annuaire */ /* */ rc = ldap_search_s(pSessionLdap, // Session LDAP pRacineLdap, // Base de la recherche LDAP_SCOPE_SUBTREE, // Sccpe : LDAP_SCOPE_BASE, LDAP_SCOPE_ONELEVEL, LDAP_SCOPE_SUBTREE "(objectClass=*)", // Filtre de recherche NULL, // Attributs que l'on souhaite visualiser 0, // Indique si l'on souhaite uniquement les types (1) ou // Les attributs et les valeurs (0) &pResultat ) ; // Pointeur vers le résultat if (rc != LDAP_SUCCESS ) { // Erreur lors de la recherche, on termine après affichage du message d'erreur AfficheErreurLdap("ldap_search_s", rc); exit (4); } printf("Requête réalisée\n"); /* On va maintenant parcourir le résultat et afficher les couples */ /* attributs, valeurs */ pEntree = ldap_first_entry( pSessionLdap, pResultat ); while (pEntree != NULL) { // Récupération du DN, et affichage de celui-ci pDN = ldap_get_dn( pSessionLdap, pEntree ); if ( pDN != NULL ) { printf( "dn: %s\n", pDN ); // Libération de la mémoire allouée par l'API LDAP ldap_memfree( pDN ); } // Pour chaque attribut, on va lire le couple attribut, valeur pAttribut = ldap_first_attribute( pSessionLdap, pEntree, &pBer ); while ( pAttribut != NULL) { // Récupération des valeurs associées à un attribut pValeurs = ldap_get_values( pSessionLdap, pEntree, pAttribut); if (pValeurs != NULL ) { for ( i = 0; pValeurs[i] != NULL; i++ ) printf( "%s: %s\n", pAttribut, pValeurs[i]); // Libération des valeurs lues ldap_value_free( pValeurs ); } // Libération de la mémoire utilisée par l'attribut ldap_memfree( pAttribut ); // Lecture de l'attribut suivant pAttribut = ldap_next_attribute( pSessionLdap, pEntree, pBer ); } // Passage à la ligne dans l'affichage printf( "\n\n" ); // Récupération de l'entrée suivante de l'annuaire pEntree = ldap_next_entry( pSessionLdap, pEntree ); } // Libération du message de résultat ldap_msgfree( pResultat ); /* Fin de la session LDAP */ ldap_unbind( pSessionLdap ); } /* * * Fonction permettant d'afficher les erreurs des opérations LDAP * * */ void AfficheErreurLdap(char *fonction, ULONG rc) { fprintf(stderr,"Erreur LDAP dans la fonction '%s', Code : %ld (0x%xld)\n", fonction, rc,rc); }

更多推荐

本文发布于:2023-08-05 04:57:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1428020.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:名称   单位   组织   计算机   computer

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!