Novell Home

NetWare: yet another example of SSGetNLMLoadedList()

From Developer Community

This sample prints names of all loaded NLMs together with their version info and descriptions.

Sample Code

#include <nit\nwservst.h>
#include <nwerrno.h>
#include <stdio.h>
#include <stdlib.h>

union NLMList {
   BYTE buffer[ SS_DEFAULT_BUFFER_SIZE];
   struct GetNLMLoadedListStructure s;
};
union NLMInfo {
   BYTE buffer[ SS_DEFAULT_BUFFER_SIZE];
   struct GetNLMInfoStructure s;
};
int main( void) {
   LONG          startNumber = 0;
   union NLMList list;
   LONG          ccode;
   if (( ccode = SSGetNLMLoadedList( 0, list.buffer, sizeof( list))) != ESUCCESS) {
      printf( "SSGetNLMLoadedList failed, ccode = %u\n", ccode);
      return EXIT_FAILURE;
   }
   do {
      size_t i;
      printf( "*** NLMCount = %u\n", list.s.NLMCount);
      for ( i = 0; i < list.s.NLMCount; ++i) {
         union NLMInfo info;
         printf( "%4u ", ( &( list.s.NLMNumbers))[ i]);
         if (( ccode = SSGetNLMInfo(( &( list.s.NLMNumbers))[ i], info.buffer, sizeof( info))) != ESUCCESS) {
            printf( "SSGetNLMInfo failed, ccode = %u\n", ccode);
            return EXIT_FAILURE;
         }
         printf( "v%02u.%02u.%02u %-12.*s %.*s\n",
            info.s.NLMInfo.nlmMajorVersion,
            info.s.NLMInfo.nlmMinorVersion,
            info.s.NLMInfo.nlmRevision,
            info.s.startOfLStrings, &info.s.startOfLStrings + 1,
            ( &info.s.startOfLStrings)[ info.s.startOfLStrings + 1],
            &info.s.startOfLStrings + info.s.startOfLStrings + 2);
      }
      startNumber = ( &( list.s.NLMNumbers))[ list.s.NLMCount - 1] + 1;
   } while ( SSGetNLMLoadedList( startNumber, list.buffer, sizeof( list)) == ESUCCESS && list.s.NLMCount != 0);
   return EXIT_SUCCESS;
}

--Dmitry Mityugov

Novell® Making IT Work As One

© 2010 Novell