2009/4/21 Michael Medin <mich...@medin.name>:
> Hello,
>
> All the "built in" plugins are avalible as source so it should be pretty
> simple to figure out.
> The idea is anyways that you fill the buffer passed to the function from the
> "core".
> (this will BTW change in the next major release)


Thanks for the explanation Michael - this should be very helpful.

I'm curious though, what are the guidelines around writing a C++
program to be executed as an external script? I've written a simple
program for checking if the driver name supplied as an arg is loaded
in the system, but I'm not using any of the above "glue" to do so, I
just make the checks and printf the output and return the result code.
Is this sufficient? Here's the code;

#include <stdafx.h>
#include <windows.h>
#include <psapi.h>
#include <tchar.h>
#include <stdio.h>

#define ARRAY_SIZE 1024

int main(int argc, char* argv[])
{
        LPVOID drivers[ARRAY_SIZE];
        DWORD cbNeeded;
        int cDrivers, i;

        if(EnumDeviceDrivers(drivers, sizeof(drivers), &cbNeeded) && cbNeeded
< sizeof(drivers))
        {
                TCHAR szDriver[ARRAY_SIZE];

                cDrivers = cbNeeded / sizeof(drivers[0]);;

                for (i=0; i < cDrivers; i++ )
                {
                        if(GetDeviceDriverBaseName(drivers[i], szDriver, 
sizeof(szDriver) /
sizeof(szDriver[0])))
                        {
                                if(argv[1] != NULL && _tcscmp ( szDriver, 
_T(argv[1])) == 0)    
                                {
                                        printf("Driver is loaded");
                                        return 0; // OK
                                }
                        }
                }

                printf("Driver is not loaded!");
                return 2; // CRITICAL
        }
        else
        {
                printf("EnumDeviceDrivers failed; array size needed is %d\n",
cbNeeded / sizeof(LPVOID));
                return 3; // UNKNOWN
        }
}


It's based off the code here;
http://msdn.microsoft.com/en-us/library/ms682619(VS.85).aspx

I just drop the compiled program into "ExternalScripts" and add this to nsc.ini;

[External Scripts]
check_driver = ExternalScripts\Check_Driver.exe <driver-name-here>

Is this an appropriate way to carry-out this check? It works perfectly
fine so far, but I'm just curious to see if this is a proper way of
doing things?

Cheers,
Chris

------------------------------------------------------------------------------
Crystal Reports &#45; New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty&#45;free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Nagios-users mailing list
Nagios-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nagios-users
::: Please include Nagios version, plugin version (-v) and OS when reporting 
any issue. 
::: Messages without supporting info will risk being sent to /dev/null

Reply via email to