Missing api-ms-win-shcore-scaling-l1-1-1.dll on upgrade from 5.2.5-66 to 5.2.5-84 on Windows 7

cancel
Showing results for 
Search instead for 
Did you mean: 
Palo Alto Networks Approved
Palo Alto Networks Approved
Community Expert Verified
Community Expert Verified

Missing api-ms-win-shcore-scaling-l1-1-1.dll on upgrade from 5.2.5-66 to 5.2.5-84 on Windows 7

L0 Member

Hi,

 

We recently upgraded our GlobalProtect clients to 5.2.5-84. Since then, the client won't start on Windows 7 claiming that it cannot find the following file : api-ms-win-shcore-scaling-l1-1-1.dll

 

On Win 7 x86, we managed to make it work by copying a dll found on a ressource forum but it doesn't with Win 7x64

Does someone encounter the same issue ?

Did someone find a workaround ?

11 REPLIES 11

L0 Member

Hi,

 

I managed to get 5.2.7-37 running on Win7 x64. The issue is simply the newer versions use a dll and API that does not exist in 7 but was introduced in 8/8.1 and later versions. This excellent answer on SO explains the specifics if you are interested: https://stackoverflow.com/a/50276714 

 

Dependency Walker showed that PanGPA.exe only imports one single function from the API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL, SetProcessDpiAwareness(...), so it was easy enough to just roll my own dummy DLL file in Visual Studio 2013 that exports this single function, compile that for x64 and voilá, GlobalProtect is a happy camper.

 

For the sake of it, I even implemented the function such that it actually makes use of the "legacy" Win7 API to accomplish the same result, SetProcessDPIAware() from user32.dll.

 

I will try and distribute my dll in binary form, but you are free to just input below code into your copy of VS13 (Create a new C++ DLL project from the menu)  and compile your own DLL file if you don't trust me. It's literally a one-liner.

 

In your header, put something like this:

typedef enum PROCESS_DPI_AWARENESS {
	PROCESS_DPI_UNAWARE,
	PROCESS_SYSTEM_DPI_AWARE,
	PROCESS_PER_MONITOR_DPI_AWARE
};

extern "C" __declspec(dllexport) HRESULT SetProcessDpiAwareness(PROCESS_DPI_AWARENESS value);

 

In your cpp file, put:

HRESULT SetProcessDpiAwareness(PROCESS_DPI_AWARENESS value) {
	return SetProcessDPIAware();
}

 

When compiling, make sure you select x64 as your platform from the menu, otherwise GlobalProtect will crash with 0xc000007b (STATUS_INVALID_IMAGE_FORMAT).

 

When done compiling, make sure your file name is API-MS-WIN-SHCORE-SCALING-L1-1-1.dll and copy the file to C:\Program Files\Palo Alto Networks\GlobalProtect.

 

If rules in this community allow (dear mods please remove the link if this is not allowed), I uploaded my binary dll file to mega, see https://mega.nz/file/7DgmBaTJ#JUdmDbAY13E0McK6nKbYhD9vjV_IFrpLcvlZRNCg9GQ 

 

Have fun!

 

Good idea. If i understand this dll.,. this Dll can be used *ONLY* on win64 systems? 

Like what you see?

Show your appreciation!

Click Like if a post is helpful to you or if you just want to show your support.

Click Accept as Solution to acknowledge that the answer to your question has been provided.

The button appears next to the replies on topics you’ve started. The member who gave the solution and all future visitors to this topic will appreciate it!

These simple actions take just seconds of your time, but go a long way in showing appreciation for community members and the LIVEcommunity as a whole!

The LIVEcommunity thanks you for your participation!