Solved

procedure entry point not located in dll

Posted on 1998-12-23
4
318 Views
Last Modified: 2013-12-03
According to microsoft's article about how to create
a .lib file when you do not have the object or source,
I try to use the procedure NtQueryInformationProcess
from ntdll.dll

I built a dummy.cpp:
#include <windows.h>
#include <process.h>
#include "psapi.h"
typedef LONG NTSTATUS;

typedef enum _PROCESSINFOCLASS {
    ProcessBasicInformation,
    ProcessQuotaLimits,
   .
   .
   .
    ProcessPriorityBoost,
    MaxProcessInfoClass
    } PROCESSINFOCLASS;

extern "C" __declspec(dllexport) NTSTATUS NTAPI NtQueryInformationProcess(
    IN HANDLE ProcessHandle,
    IN PROCESSINFOCLASS ProcessInformationClass,
    OUT PVOID ProcessInformation,
    IN ULONG ProcessInformationLength,
    OUT PULONG ReturnLength OPTIONAL
    ) {return (0);}

I compiled it:
cl /c /Ob0 dummy.cpp

I created a lib:
lib /DEF dummy.obj /OUT:ntdll.lib

and built my executable , queryp.cpp:
   retValue = NtQueryInformationProcess( hProcess,           infoEnum,
          pBuffer, cbBuffer, &retLen );

the h file which declares the dll function looks like this:
#ifdef __cplusplus
extern "C" {
#endif

//-----------------------------------------------------------------------------
// Typedefs from NTDDK.H and NTDEF.H that will be needed later
//-----------------------------------------------------------------------------

typedef LONG NTSTATUS;
.
.
.

NTSYSAPI
NTSTATUS
NTAPI
NtQueryInformationProcess(
    IN HANDLE ProcessHandle,
    IN PROCESSINFOCLASS ProcessInformationClass,
    OUT PVOID ProcessInformation,
    IN ULONG ProcessInformationLength,
    OUT PULONG ReturnLength OPTIONAL
    );

#ifdef __cplusplus
}
#endif

everything looks perfect, but when I  run me exe
I get the following error:
The procedure entry point _NtQueryInformationProcess@20
could not be located in the dynamic link library ntdll.dll

What's wrong here ?
HELP!!!

(bye the way - I am trying to study this thing,
so I know the easy way is just to copy the ntdll.lib file
from the DDK, but I want to know why I am wrong so...)

Thanks!
0
Comment
Question by:livni
  • 2
4 Comments
 
LVL 15

Expert Comment

by:Tommy Hui
ID: 1417671
Because the compiler is mangling the function name, _NtQueryInformationProcess@20 really is NOT in the DLL. The name in the DLL is NtQueryInformationProcess. Note there is no underscore and there is no @20 appended to the name. You will need to use a DEF file and add a IMPORTS section for the DLL like

IMPORTS
  _NtQueryInformationProcess@20 = NTDLL.NtQueryInformationProcess


0
 
LVL 2

Author Comment

by:livni
ID: 1417672
Hi Thui -
First I wanna say thanks.
This one got me one step ahead,
but did not solve my problem.

Now my program is linked with the dummy.obj ,
and runs the stub procedure instead of the one from the dll.

If I link without dummy.obj, I get unresolved external refference
__imp__NtQueryInformationProcess@20

GIVE IT ONE MORE SHOT!
0
 
LVL 15

Accepted Solution

by:
NickRepin earned 100 total points
ID: 1417673
Here is the sample.
In your case, specify /EXPORT option for LIB.

// MAKE.CMD
//*************
cl /c /Ob0 /LD dummy.cpp
lib /DEF: /EXPORT:MessageBeep=MessageBeep dummy.obj /OUT:user32.lib
cl test.cpp user32.lib
// DUMMY.CPP
//***********
extern "C" {
   __declspec(dllexport)
   unsigned int __stdcall MessageBeep(unsigned int)
   { return 0; }
}
// TEST.CPP
//*********
extern "C" {
   unsigned int __stdcall MessageBeep(unsigned int);
}

void main(void)
{
   MessageBeep(-1);
}


0
 
LVL 2

Author Comment

by:livni
ID: 1417674
THANKS!

and Thui - Thank you too...
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A theme is a collection of property settings that allow you to define the look of pages and controls, and then apply the look consistently across pages in an application. Themes can be made up of a set of elements: skins, style sheets, images, and o…
Entering time in Microsoft Access can be difficult. An input mask often bothers users more than helping them and won't catch all typing errors. This article shows how to create a textbox for 24-hour time input with full validation politely catching …
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Delivering innovative fully-managed cloud services for mission-critical applications requires expertise in multiple areas plus vision and commitment. Meet a few of the people behind the quality services of Concerto.

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now