SIMPLE.C
/* 
 *  This is a part of the Microsoft Source Code Samples. 
 *  Copyright 1996 - 1998 Microsoft Corporation. 
 *  All rights reserved. 
 * 
 *  The following example uses the minimum amount of code required to 
 *  utilize any licensing system.  This example is provided on the SDK 
 *  and can be used to familiarize oneself with a licensing system or 
 *  as a template for an application.  Note that the code exits if a 
 *  grant cannot be obtained.  Recall that this is strictly an 
 *  application's decision and is not dictated by any licensing system 
 *  which adheres to the LSAPI standard. 
 */ 
 
#include <stdio.h> 
#include <stdlib.h> 
#include "windows.h" 
 
/* 
 * Include the LSAPI header file. 
 */ 
#include "lsapi.h" 
 
/* 
 * Define the product name, product version, and publisher name for 
 * use with the licensing calls. 
 */ 
#define MYAPP_PRODUCT_NAME    "sample_product" 
#define MYAPP_PRODUCT_VERSION "1.0" 
#define MYAPP_PUBLISHER_NAME  "sample_publishers" 
 
/* 
 * Define the strings used to log a comment with the license system. 
 */ 
#define MYAPP_REQUEST_LOG_COMMENT "Comment for the LSRequest call" 
#define MYAPP_RELEASE_LOG_COMMENT "Comment for the LSRelease call" 
 
/* 
 * Forward declarations 
 */ 
void PrintErrors( LS_HANDLE handle, LS_STATUS_CODE errorCode ); 
 
 
__cdecl main() 
{ 
   /* 
    * LSAPI Variables 
    */ 
   LS_ULONG        unitsGranted; 
   LS_HANDLE       licenseHandle; 
   LS_STATUS_CODE  status; 
 
   /************ the following code is for the LSAPI beta only! ************/ 
   char            szProviderPath[ MAX_PATH ]; 
   UINT            nChars; 
 
   /* install if necessary */ 
   nChars = GetSystemDirectory( szProviderPath, sizeof( szProviderPath ) ); 
   if ( 0 == nChars ) 
   { 
      printf( "Can't get system directory, error %d.\n", GetLastError() ); 
   } 
 
   lstrcat( szProviderPath, "\\mslsp32.dll" ); 
   status = LSInstall( szProviderPath ); 
   if ( LS_SUCCESS != status ) 
   { 
      printf( "Cannot install LSAPI, error 0x%08lx.\n", status ); 
   } 
 
   /* add licenses for our product */ 
   status = LSLicenseUnitsSet( LS_ANY, 
                               MYAPP_PUBLISHER_NAME, 
                               MYAPP_PRODUCT_NAME, 
                               MYAPP_PRODUCT_VERSION, 
                               LS_LICENSE_TYPE_NODE, 
                               LS_NULL, 
                               1, 
                               0, 
                               NULL ); 
   if ( LS_SUCCESS != status ) 
   { 
      printf( "Cannot install licenses, error 0x%lx.\n", status ); 
   } 
   /************ the above code is for the LSAPI beta only! ************/ 
 
   /* 
    * Make the call to request a grant 
    */ 
   status = LSRequest( 
         LS_ANY,                               /* Use any licensing system */ 
         (LS_STR FAR *)MYAPP_PUBLISHER_NAME,   /* Publisher name           */ 
         (LS_STR FAR *)MYAPP_PRODUCT_NAME,     /* Product name             */ 
         (LS_STR FAR *)MYAPP_PRODUCT_VERSION,  /* Version number           */ 
         LS_DEFAULT_UNITS,                     /* Let license figure units */ 
         (LS_STR FAR *)MYAPP_REQUEST_LOG_COMMENT, /* Log comment         */ 
         0,                                    /* No Challenge             */ 
         &unitsGranted,                        /* # units granted          */ 
         &licenseHandle );                     /* license context          */ 
 
   /* 
    * Check whether we got a successful grant.  If not, then call a routine 
    * which prints out the error message, free the license handle, and do 
    * not continue running the application. 
    */ 
   if ( LS_SUCCESS != status ) 
      { 
      PrintErrors( licenseHandle, LS_USE_LAST ); 
      LSFreeHandle( licenseHandle ); 
      return(1); 
      } 
 
   /* 
    * Continue with the application. 
    */ 
   printf("Hello World\n"); 
 
 
   /* 
    * We are now done with the application, so we must make a call 
    * to release the grant. 
    */ 
   status = LSRelease( 
         licenseHandle,                        /* License context          */ 
         LS_DEFAULT_UNITS,                     /* Let license figure units */ 
         (LS_STR FAR *)MYAPP_RELEASE_LOG_COMMENT);/* Log comment         */ 
   if ( LS_SUCCESS != status ) 
      { 
      PrintErrors( licenseHandle, status ); 
      LSFreeHandle( licenseHandle ); 
      return( 1 ); 
      } 
 
   /* 
    * Free the license handle. 
    */ 
   LSFreeHandle( licenseHandle ); 
 
 
   exit( 0 ); 
} 
 
 
void PrintErrors( LS_HANDLE handle, LS_STATUS_CODE errorCode ) 
{ 
   LS_STATUS_CODE   status; 
   char             errorText[200]; 
 
 
   errorText[0] = 0; 
 
   status = LSGetMessage( handle, errorCode, (LS_STR FAR *)errorText, 200); 
   if ( LS_TEXT_UNAVAILABLE == status ) 
      printf("Error: No message catalog available.\n"); 
   else 
      if ( LS_UNKNOWN_STATUS == status ) 
         printf("Error: Unknown error code was used.\n"); 
      else 
         printf("Error: %s\n", errorText); 
}