1. Serial ID from Win32

I can get a disk serial ID from DOS, but how would I do that using a Win32
function? (The DOS library uses allocate_low(), which isn't allowed in the
Win32 environment!)

Thanks!
<\<

new topic     » topic index » view message » categorize

2. Re: Serial ID from Win32

On Mon, 4 Dec 2000 13:46:26 -0500, Ck Lester wrote:

>I can get a disk serial ID from DOS, but how would I do that using a Win32
>function? (The DOS library uses allocate_low(), which isn't allowed in the
>Win32 environment!)
>
>Thanks!
><\<


Are you referring to a 'Volume Serial Number'?  If so, then you'll want to
use 'GetVolumeInformation' in 'kernel32.dll'.  I don't know if there is an
existing library that already has this function wrapped.  Let me know if
you need any assistance in using it.

-- Brian

new topic     » goto parent     » topic index » view message » categorize

3. Re: Serial ID from Win32

Brian,

Yes, Volume Serial Number. Since I have no idea how to wrap a DLL function,
I'll need an existing function from an existing library...

If you can provide some code I can just plug into my app, please do! smile

Thanks!
ck

P.S. I've got a VBA version if that would help.

On Mon, 4 Dec 2000 14:54:43 -0500, Brian Broker <bkb at CNW.COM> wrote:

>On Mon, 4 Dec 2000 13:46:26 -0500, Ck Lester wrote:
>
>>I can get a disk serial ID from DOS, but how would I do that using a Win32
>>function? (The DOS library uses allocate_low(), which isn't allowed in the
>>Win32 environment!)
>>
>>Thanks!
>><\<
>
>
>Are you referring to a 'Volume Serial Number'?  If so, then you'll want to
>use 'GetVolumeInformation' in 'kernel32.dll'.  I don't know if there is an
>existing library that already has this function wrapped.  Let me know if
>you need any assistance in using it.
>
>-- Brian

new topic     » goto parent     » topic index » view message » categorize

4. Re: Serial ID from Win32

On Mon, 4 Dec 2000 15:04:16 -0500, Ck Lester wrote:

>Brian,
>
>Yes, Volume Serial Number. Since I have no idea how to wrap a DLL function,
>I'll need an existing function from an existing library...
>
>If you can provide some code I can just plug into my app, please do! smile
>
>Thanks!
>ck

OK, here you go... plug and chug away:

---------------------------------------
include win32lib.ew

constant
  xGetVolumeInfo = linkFunc( kernel32, "GetVolumeInformationA",
                   {C_POINTER, C_POINTER, C_UINT, C_POINTER, C_POINTER,
                    C_POINTER, C_POINTER, C_UINT }, C_INT)

function getVolSerial( sequence root_dir )
-- Input: A string that contains the root directory of the volume to be
--        described.  A trailing backslash is required. For example, you
--        would specify \\MyServer\MyShare as "\\\\MyServer\\MyShare\\",
--        or the C drive as "C:\\".
-- Output: Volume Serial Number

  atom mset, rootPathName, volSerNum, ret_val

  mset = new_memset()

  rootPathName = acquire_mem( mset, root_dir )
  volSerNum    = acquire_mem( mset, DWord )

  if not c_func( xGetVolumeInfo, { rootPathName, NULL, NULL, volSerNum,
                                   NULL, NULL, NULL, NULL } ) then
    warnErr( "xGetVolumeInfo failed in function getVolSerial" )
  end if

  ret_val = peek4u( volSerNum )
  release_mem( mset )

  return ret_val

end function

-- the following two lines are a test and can be deleted --
printf( 1, "Volume Serial Number: %x", getVolSerial( "C:\\" ) )
-- this can be verified by typing "vol" at the C: prompt
if wait_key() then end if
---------------------------------------
-- Questions?  Comments?
-- just let me know...
-- Brian

new topic     » goto parent     » topic index » view message » categorize

5. Re: Serial ID from Win32

Ck,

One comment on the code I sent.  Due to the changing memory management
routines in Win32Lib, this will require the most recent version available.
I used version 0.54.5...

-- Brian

new topic     » goto parent     » topic index » view message » categorize

6. Re: Serial ID from Win32

Brian, thanks a bazillion. I'm at home right now, but I'll plug this stuff
in tomorrow at work and see how it goes.

BTW, what would I need to do if I didn't want to include Win32Lib? How much
does that add to a final executable? Just curious, as the particular
program for which this is needed is for my own use in creating programs for
others to use...

Thanks, again!
<\<

On Mon, 4 Dec 2000 17:39:14 -0500, Brian Broker <bkb at CNW.COM> wrote:
>---------------------------------------
>-- Questions?  Comments?
>-- just let me know...
>-- Brian

new topic     » goto parent     » topic index » view message » categorize

7. Re: Serial ID from Win32

On Mon, 4 Dec 2000 19:18:04 -0500, Ck Lester wrote:

>Brian, thanks a bazillion. I'm at home right now, but I'll plug this stuff
>in tomorrow at work and see how it goes.
>
>BTW, what would I need to do if I didn't want to include Win32Lib? How much
>does that add to a final executable? Just curious, as the particular
>program for which this is needed is for my own use in creating programs for
>others to use...
>
>Thanks, again!

Bad habit of mine to assume that a Windows question means using
Win32Lib...  Here it is without using Win32Lib (i.e. less error checking):

-------------------------------------------------------
include dll.e
include machine.e
include get.e

constant
  kernel32 = open_dll( "kernel32.dll" ),
  xGetVolumeInfo = define_c_func( kernel32, "GetVolumeInformationA",
                   {C_POINTER, C_POINTER, C_UINT, C_POINTER, C_POINTER,
C_POINTER, C_POINTER, C_UINT }, C_INT)

function getVolSerial( sequence root_dir )
-- Input: A string that contains the root directory of the volume to be
described.
--        A trailing backslash is required. For example, you would specify
--        \\MyServer\MyShare as "\\\\MyServer\\MyShare\\", or the C drive
as "C:\\".
-- Output: Volume Serial Number

  atom rootPathName, volSerNum
  sequence ret_val

  rootPathName    = allocate_string( root_dir )
  volSerNum       = allocate( 4 )

  if not c_func( xGetVolumeInfo, { rootPathName, NULL, NULL, volSerNum,
                                   NULL, NULL, NULL, NULL } ) then
    puts( 1, "xGetVolumeInfo failed in function getVolSerial" )
  end if

  ret_val = { peek4u( volSerNum ) }
  free( rootPathName )
  free( volSerNum )

  return ret_val

end function
-------------------------------------------------------
-- the following lines are a test and can be deleted --
sequence sn

sn = sprintf( "%08x", getVolSerial( "C:\\" ) )
printf( 1, "Volume Serial Number is %s-%s", {sn[1..4],sn[5..8]} )
-- this can be verified by typing "vol" at the C: prompt
if wait_key() then end if

-------------------------------
-- hope this is better for you
-- let me know if you'd also like to get the Volume Label with this...
-- (you can easily emulate the 'vol' command with this function)
-- Brian

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu